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

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

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 4.0.16
    • 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

            rhn-engineering-bban Bela Ban
            rhn-engineering-bban Bela Ban
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: