-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
False
-
-
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