[
https://issues.jboss.org/browse/JGRP-1396?page=com.atlassian.jira.plugin....
]
Bela Ban commented on JGRP-1396:
--------------------------------
Since the RingBuffer's low seqno is only advanced on a stable() message, we need to
make sure that adding a message to the buffer doesn't block forever (the sender *has*
to block and cannot simply discard the message when the buffer is full, as it might need
to retransmit it !).
For example, if we have STABLE initiate a stability round after 10MB have been received,
and the ring buffer has a capacity of 10'000, then the following could happen:
- A sender sends 10'000 messages of 100 bytes / message and blocks
- STABLE has received 1MB worth of data, but doesn't trigger a stability round yet
because it waits for 10MB
--> The sender blocks until STABLE runs its periodical stability round (every 50 secs
by default) !
SOLUTION:
- When the ring buffer of a sender P exceeds a certain (configurable) threshold (say 75%
by default), then we run the following protocol:
- P multicasts its highest delivered (HD) seqno
- Every member of the current view responds with the P's HD, as seen by them
- When P has collected all answers, it computes the minimum HD (MHD) for P from all
responses and sends a STABILITY message
- Every member now calls stable(MHD) for P and therefore advances HD
--> The goal is for a sender never to block
--> This additional protocol round is only needed for the above scenario. In most
cases, the STABLE protocol should advance the low seqno of the ring buffer before the
capacity is exceeded !
NAKACK2: merge NakReceiverWindow and Retransmitter
--------------------------------------------------
Key: JGRP-1396
URL:
https://issues.jboss.org/browse/JGRP-1396
Project: JGroups
Issue Type: Enhancement
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 3.1
Both NakReceiverWindow and Retransmitter use their own data structures to keep a list of
messages received (NRW) and seqnos to be retransmitted (Retrasmitter). This is redundant
and costly memory-wise.
I suggest let's merge the 2 classes, or at least let them share the data structure
which keeps track of received messages.
Suggestion II: create a ring buffer with a (changeable) capacity that keeps track of
received messages and messages to be retransmitted.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira