Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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.)

...