-
Bug
-
Resolution: Done
-
Major
-
None
-
None
The following use case loses messages:
- A sends #5 to B
- B expects #4 from A, but adds #5 and acks it
- A receives the ack(#5) and removes #5 from its sender window
- Now there is a partition such that B trashes its connection window form A, but A keeps its window for B (A:
{A,B}
, B:
{B})
- The partition heals and A sends #6 to B
- B asks A for its lowest seqno, A resends #4 (with a conn_id)
- B creates a receiver window for A with seqno=#4
- A resends #6
- B adds #6 to its window, but doesn't deliver it because it is missing #5
--> However, A will NEVER resend #5 because the ack(#5) from B removed #5 from A's sender window !
==> Possible SOLUTION: when A gets the SEND_FIRST_SEQNO and there are (unacked) messages in A's sender window, and they are not in order, then A will trash its connection window and copy the pending messages into the new window (with new seqnos !) before sending #1 (with conn_id)
==> This solution might lose the original message #5, but that's better than B never being able to deliver any messages anymore !