-
Feature Request
-
Resolution: Done
-
Major
-
None
-
None
When in SEQUENCER a member P wants to send a multicast message M, it unicasts it to the coordinator, who multicasts it on behalf of P.
The new impl SEQUENCER2 is different:
- P asks the coord for a seqno
- The coord responds with a (monotonically increasing) seqno
- P multicasts M with that seqno
- Everyone uses one global Table to deliver messages and weed out duplicates
Advantages:
- A sender sends messages itself, so the sequencer doesn't need to do sending (and potential retransmissions)
- Compared to SEQUENCER, the data is only sent and marshalled once (better for large messages)
- A sender grabs entire ranges of seqnos, so this should be efficient
The edge case handling though requires some work, e.g.
- A member B crashes after having received a seqno (e.g. 4)
- The sequencer will give out 5 next, but since nobody received 4, all subsequent messages will get stuck, waiting for 4
- The sequencer (coord) dies or leaves
- The next-in-line probably needs to run some reconciliation protocol, asking all members for their highest received seqnos
- Messages like 4 would get marked as dummy, removed from table and dropped