-
Bug
-
Resolution: Done
-
Major
-
None
-
None
Currently, BaseBundler.viewChange() purges queued messages to non-members. This poses the following problem:
- Members A, B. The view is {A,B}
- A is coord and sends a LEAVE request to B
- B adds a LEAVE response (to A) to the TransferQueueBundler's queue and installs new view {B}
- If the LEAVE response to A is still in the TQB's queue and the new view is installed before the message gets sent, the BaseBundler.viewChange() method removes all queued messages to non-members, therefore the LEAVE response to A is removed
- As a result, A will never receive the LEAVE response and therefore run into GMS.leave_timeout!
This is aggravated by the fact that a LEAVE response is unreliable (flag=NO_RELIABILITY), and therefore not retransmitted by UNICAST3.
Solution
- Remove the viewChange() method.
Reason
- Unicast messages can be sent to non-members. This is in line with the design of UNICAST3, which allows for non-members as destinations of messages.
- The msgs hashmap in BaseBundler will be emptied by the runner anyway, so we don't need to do housekeeping on that hashmap
- relates to
-
ISPN-9588 JGroups fails to install new cluster view after coordinator leave
- Closed