[
https://jira.jboss.org/jira/browse/JGRP-948?page=com.atlassian.jira.plugi...
]
Bela Ban commented on JGRP-948:
-------------------------------
Updating of local digests
-------------------------
- We have {A,B} and {C,D}
- The digest is A:15, B:7, C:10, D:9
- Before receiving the merge digest A and B multicast more messages, A's seqno is now
#20 and B's #10
- A receives the digest:
A:20, B:10, ...
+ A:15, B:7, ...
= A:20, **B:10**
================
==> We currently do NOT overwrite our own digest entry, but overwrite all others. This
is incorrect: we need to
not overwrite our own digest (as is done currently), but for all others members P, we
need to:
- If P's seqno is higher than the one in the digest: don't overwrite
- Else: reset P's NakReceiverWindow and overwrite it with the new seqno
==> If we didn't do this, in the example above, B's seqno would be #7 whereas
we already received seqnos up to #10 from
P, so we'd receive seqnos #7-#10 from P twice !
MERGE: merging digests based on hearsay
---------------------------------------
Key: JGRP-948
URL:
https://jira.jboss.org/jira/browse/JGRP-948
Project: JGroups
Issue Type: Bug
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 2.6.10, 2.8
A merge involves consolidating digests from all members. However, we don't get the
digests directly from involved members, but also include 'hearsay', e.g. in A: {A}
and B: {B,C}, B adds digest information from C. This is what I call 'hearsay', the
digest information about C isn't provided by C directly, but by B.
If B hasn't been able to communicate with C for a while, e.g. because B's link to
C was asymmetrical, then B's information about C's digest might be incorrect.
E.g. if B returns #3 as C's highest seqno, but in effect C's highest seqno is
#20, then members other than C will not be able to get messages C#3 - C#20 from C. They
would therefore queue all subsequent messages from C !
SOLUTION:
- On merging, partition coordinators cannot just return their digests, but have to fetch
the digests for the partition from all members
- The digest consolidation only accepts digests from direct members, e.g. when B returns
a digest of (B:24,C:7,D:15) we only use the B part of it
- Simplification of the above: have members only return their lowest, highest received
and highest delivered seqnos, but *not* seqnos they 'know' (hearsay) from other
members
- When a merge coordinator gets digest information from {A,B,D} in a merge between {A,B}
and {C,D}, then it has to fail the merge because it is missing innformation from C !
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira