[
https://jira.jboss.org/jira/browse/JGRP-952?page=com.atlassian.jira.plugi...
]
Bela Ban commented on JGRP-952:
-------------------------------
If we stick with trashing the sender window on SEND_FIRST_SEQNO, we might actually trash
it multiple times !
- A sends #25 #26 #27 #28 #29 #30 to B
- B doesn't have a receiver window for B, so it sends 6 SEND_FIRST_SEQNO messages to
A
- On reception of the first SEND_FIRST_SEQNO, A trashes its window and sends #1 #2 #3 #4
to B
- B acks #3
- A's sender window is now #1 #2 #4 (#3 was acked)
- A receives the next SEND_FIRST_SEQNO message from B
- Because there are gaps in its sender window, it trashes its connection again !
A better solution:
- Have A send the conn_id with a SEND_FIRST_SEQNO message
- On reception of SEND_FIRST_SEQNO, we compare the conn_id sent with the message with our
send_conn_id. If they are the same, we trash the window *unconditionally*, else we send
the first seqno again
- Issue: we might have to send conn_id with *each message* !
MERGE: UNICAST can lose messages on merging
-------------------------------------------
Key: JGRP-952
URL:
https://jira.jboss.org/jira/browse/JGRP-952
Project: JGroups
Issue Type: Bug
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 2.6.10, 2.8
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 !
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira