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.



      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





  • 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




Configuration Parameters

STATE_TRANSFER protocol has no parameters.


See Protocol Configuration Common Parameters.  STATE_TRANSFER has no protocol-specific parameters.



Back To JGroups