[
https://issues.jboss.org/browse/JGRP-1868?page=com.atlassian.jira.plugin....
]
Bela Ban commented on JGRP-1868:
--------------------------------
h5. Solution
# Retransmit only the _oldest_ N messages
# Use a FixedBitSet for the missing messages (replacing SeqnoList)
The size of the FixedBitSet is computed as {{highest-received}} - {{highest-deliverable}},
e.g. 550-499 == 51. This would create a FixedBitSet with offset=550 and 1 long (can
represent 64 seqnos).
The number of messages to ask for retransmission is computed as follows:
{{TP.max_bundle_size * 8}}, e.g. {{64'000 / 8 * 64 = 512'000}}. This means that we
can store 8'000 longs in 64'000 bytes, and each long can represent 64 seqnos. In
this case, the max size of the FixedBitSet should therefore be 512'000.
Size of XMIT_REQ is not limited
-------------------------------
Key: JGRP-1868
URL:
https://issues.jboss.org/browse/JGRP-1868
Project: JGroups
Issue Type: Bug
Affects Versions: 3.4.4, 3.5
Reporter: Radim Vansa
Assignee: Bela Ban
Fix For: 3.6
When UNICAST3 or NAKACK2 send XMIT_REQs, they serializes SeqnoList as payload without any
limits upon its size. If there are too many missing messages, the XMIT_REQ grows over
TP.max_bundle_size and cannot be sent at all.
{code}
JGRP000029: edg-perf03-10774: failed sending message to edg-perf01-63702 (64072 bytes):
java.lang.Exception: message size (64072) is greater than max bundling size (64000). Set
the fragmentation/bundle size in FRAG and TP correctly, headers: UNICAST3: XMIT_REQ,
seqno=0, UDP: [channel_name=default]
{code}
It's also undesirable to resend thousands of messages, as the receiver likely cannot
process them all at once and only few of them will be actually processed. Therefore only X
oldest ones (in order to cleanup the tables) should be resent.
--
This message was sent by Atlassian JIRA
(v6.3.1#6329)