...
The following structures are used for the initial handshake between client and server:
Code Block |
---|
class FollowerInfoLearnerInfo { int protocolVersion; int followerType; // Follower = 1, int acceptedEpoch; } class ServerInfo { int protocolVersion; int proposedEpoch; } class AckNewEpoch { int lastNewLeaderEpoch; long lastAcceptedZxidserverid; } |
The actual proposals are communicated between follower and leader using a single data structure:
...
type | zxid | data | notation | meaning |
---|---|---|---|---|
FOLLOWERINFO(11) | acceptedEpoch | LearnerInfo | FOLLOWERINFO(acceptedEpoch) | The follower has accepted epoch acceptedEpoch. |
DIFF(13) | last committed zxid | n/a | DIFF(lastCommittedZxid) | lastCommittedZxid is the last zxid committed by the leader. |
TRUNC(14) | truncZxid | n/a | TRUNC(truncZxid) | Truncate the history to truncZxid |
SNAP(15) | n/a | n/a | SNAP | A state transfer (aka snapshot) will be sent to the follower. this will be a fuzzy state transfer that may include zxids being sent to the follower. The state transfer will immediately follow this packet. |
OBSERVERINFO(16) | last zxid accepted learned | n/a LearnerInfo | OBSERVERINFO(lastZxid) | The observer has accepted up to lastZxid. |
NEWEPOCH(17) | proposed epoch | n/a | NEWEPOCH(e) | The new proposed epoch |
ACKEPOCH(18) | accepted epoch | n/a | ACKEPOCH(e) | Acknowledge the acceptance of the new epoch |
NEWLEADER(10) | e << 32 | n/a | NEWLEADER(e) | Accept this leader as the leader of the epoch e. |
UPTODATE(12) | n/a | n/a | UPTODATE | The follower is now uptodate enough to begin serving clients. |
PROPOSAL(2) | zxid of proposal | proposed message | PROPOSAL(zxid, data) | Propose a message. (Request that it be accepted into a followers history.) |
ACK(3) | zxid of proposal to ack | n/a | ACK(zxid) | Everything sent to the follower by the leader up to zxid has been accepted into its history (logged to disk). |
COMMIT(4) | zxid of proposal to commit | n/a | COMMIT(zxid) | Everything in the followers history up to zxid should be committed (aka delivered). |
INFORM(8) | zxid of proposal | data of proposal | INFORM(zxid, data) | Deliver the data. (Only used with observers.) |
...