mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-25 14:12:13 +00:00
MINOR: peers: Add 2 peer flags about the peer learn status
PEER_F_LEARN_PROCESS and PEER_F_LEARN_FINISHED flags are added to help to fix locking issue about peers. Indeed, a peer is able to update the peers "section" state under its own lock. Because the resync task locks all peers at once, there is no conflict at this level. But there is nothing to prevent 2 peers to update the peers state in same time. So it seems there is no real issue here, but there is a theorical thread-safety issue here. And it means the locking mechanism of the peers must be reviewed. In this context, the 2 flags above will help to move all update of the peers state in the scope of resync task. Each peer will be able to update its own state and the resync task will be responsible to update the peers state accordingly.
This commit is contained in:
parent
4078893049
commit
9b78e33837
12
src/peers.c
12
src/peers.c
@ -90,16 +90,18 @@
|
||||
/* Remote peer teaching state */
|
||||
/******************************/
|
||||
#define PEER_F_TEACH_PROCESS 0x00000001 /* Teach a lesson to current peer */
|
||||
#define PEER_F_TEACH_FINISHED 0x00000008 /* Teach conclude, (wait for confirm) */
|
||||
#define PEER_F_TEACH_COMPLETE 0x00000010 /* All that we know already taught to current peer, used only for a local peer */
|
||||
#define PEER_F_LEARN_ASSIGN 0x00000100 /* Current peer was assigned for a lesson */
|
||||
#define PEER_F_LEARN_NOTUP2DATE 0x00000200 /* Learn from peer finished but peer is not up to date */
|
||||
#define PEER_F_TEACH_FINISHED 0x00000002 /* Teach conclude, (wait for confirm) */
|
||||
#define PEER_F_TEACH_COMPLETE 0x00000004 /* All that we know already taught to current peer, used only for a local peer */
|
||||
#define PEER_F_LEARN_ASSIGN 0x00000010 /* Current peer was assigned for a lesson */
|
||||
#define PEER_F_LEARN_PROCESS 0x00000020 /* Learn from peer was started */
|
||||
#define PEER_F_LEARN_FINISHED 0x00000040 /* Learn from peer fully finished */
|
||||
#define PEER_F_LEARN_NOTUP2DATE 0x00000080 /* Learn from peer finished but peer is not up to date */
|
||||
#define PEER_F_ALIVE 0x20000000 /* Used to flag a peer a alive. */
|
||||
#define PEER_F_HEARTBEAT 0x40000000 /* Heartbeat message to send. */
|
||||
#define PEER_F_DWNGRD 0x80000000 /* When this flag is enabled, we must downgrade the supported version announced during peer sessions. */
|
||||
|
||||
#define PEER_TEACH_RESET ~(PEER_F_TEACH_PROCESS|PEER_F_TEACH_FINISHED) /* PEER_F_TEACH_COMPLETE should never be reset */
|
||||
#define PEER_LEARN_RESET ~(PEER_F_LEARN_ASSIGN|PEER_F_LEARN_NOTUP2DATE)
|
||||
#define PEER_LEARN_RESET ~(PEER_F_LEARN_ASSIGN|PEER_F_LEARN_PROCESS|PEER_F_LEARN_FINISHED|PEER_F_LEARN_NOTUP2DATE)
|
||||
|
||||
#define PEER_RESYNC_TIMEOUT 5000 /* 5 seconds */
|
||||
#define PEER_RECONNECT_TIMEOUT 5000 /* 5 seconds */
|
||||
|
Loading…
Reference in New Issue
Block a user