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