Uploaded image for project: 'JGroups'
  1. JGroups
  2. JGRP-2324

TransferQueueBundler: view change must not purge messages to non-members

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: None
    • Fix Version/s: 4.0.16
    • Labels:
      None

      Description

      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

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  belaban Bela Ban
                  Reporter:
                  belaban Bela Ban
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  1 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: