If a receiver B closes its recv-table and the sender A doesn't, then (when receiving msgs from the sender) the receiver engages in a protocol using GET-FIRST-SEQNO to sync itself with the sender. This has several problems, detailed in
JGRP-1873 and JGRP-1874. (Note that the other way round (sender closing send-table), there is no issue, as the sender will create a new connection with a new conn-id).
To prevent STABLE messages interfering with GET-FIRST-SEQNO messages (
JGRP-1873), we could run an additional SYNC protocol round, e.g.
- B needs to get the lowest and highest seqno sent from A
- B sends a SYNC message to A (instead of a GET-FIRST-SEQNO message)
- B sets a flag that discards all STABLE or ACK messages on reception of SYNC
- B replies with a SYNC-OK containing the lowest and highest sent seqnos
- B creates an entry for A with the lowest and highest seqnos
- B sends a SYNC-ACK to A
- A resets the flag and starts accepting STABLE / ACK messages from B again
- A and B now use the usual protocols to retransmit missing messages