Definition
Allows a joining member to retrieve a shared group state from the oldest member (coordinator). Other members do not have to stop sending messages, while state transfer is in progress.
This works as follows:
The joiner asks the coordinator for the state
The coordinator fetches 2 things: a digest and the state from the application (as a byte{FOOTNOTE DEF } buffer)
The digest is a vector of highest and lowest sequence numbers (seqnos) seen for each member, e.g.
P[2,45]
Q[45, 288]
R[0, 10]
. This means that P's highest seqno seen by the coordinator (who probably is P!) is 45, 288 for Q and 10 for R.
Messages in the digest are part of the state, and must not be received anymore
The coordinator now sends back the state and digest to the joiner as a unicast message
The joiner sets the state
This calls into the application, which most likely converts the byte{FOOTNOTE DEF } buffer to some internal structure
The joiner also sets the digest, overriding its initial digest
This makes sure that messages that are part of the state are not received anymore and messages that have not yet been received (not part of the state) are retransmitted
Example
While S is joining the group and requesting the state from P, all members continue sending messages to the group.
When S is done setting the digest (shown above), the highest seqnos are P:55, Q:300 and R:10.
When S receives message Q:301, it requests retransmission of messages Q:289 - Q:301 from Q.
Dito for the other members
Using digest for state transfer ensures that state can be transferred to a joining member without forcing the existing group members to stop sending messages.
Configuration Example
<pbcast.STATE_TRANSFER></pbcast>
Configuration Parameters
STATE_TRANSFER protocol has no parameters.
See Protocol Configuration Common Parameters. STATE_TRANSFER has no protocol-specific parameters.
Comments