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

ReliableUnicast/ReliableMulticast: receivers block when there's no space

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 5.5.0
    • None
    • None
    • False
    • Hide

      None

      Show
      None
    • False

      I discovered that (IIRC) a refactoring made FixedBuffer non-compliant with the design: when messages are sent, they block until there's space. However, when messages / batches are received, they also block! The design [1] says (L61) that they're supposed to get dropped.

      I assume this should rather be an issue for regular messages as they're delivered one-by-one, in the same thread, so a blocking delivery thread would block all subsequent deliveries for the same sender.

      Wih OOB messages, this should not be a problem, as they are each delivered by a separate thread. However, when we have a batch where the first message is out-of-range, then we'd block even though the other messages would lead to low being advanced...
      Example: capacity=10, low=1 and a batch of seqnos 12,1,2,3,4,5,6,7,8,9,10,11. The delivery of 11 would block and thus prevent the addition of the other messages, which would advance low and therefore enable the delivery of all messages in the batch.

      In any case, blocking on the receiver side is not good and I will fix this, so that the code is compliant with the spec.

      [1] https://github.com/belaban/JGroups/blob/master/doc/design/NAKACK4.txt#L61

              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: