[jboss-jira] [JBoss JIRA] (JGRP-2327) UNICAST3: create receiver table when non-first message is received first

Bela Ban (Jira) issues at jboss.org
Tue Sep 10 11:20:03 EDT 2019


    [ https://issues.jboss.org/browse/JGRP-2327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13782410#comment-13782410 ] 

Bela Ban commented on JGRP-2327:
--------------------------------

The suggested algorithm doesn't work:
* A sends 10 unicast messages to B (#1 - #10)
* B receives and delivers them and acks #10
* On reception of the ACK(10) from B, A removes messages #1 - #10
* B closes (removes) its connection (e.g. due to a network partition)
* A keeps the connection (send window) open
* Before A can close (and remove) its connection), the network partition heals
* A sends unicast messages #11 - #20 to B
* B receives #12 first (before #11)!
* The existing code drops #12 and asks A for the first seqno (which is #11)
* The suggested changed would create a receiver window at #1 (default first seqno)
* However, this is incorrect, as we don't know A's first seqno (as a
  matter of fact, in this exact scenario, it is #11!)

--> B has no way of knowing A's first seqno
--> B *cannot* assume it is 1, as shown in this example

See unit test \[1\] which reproduces the above scenario.

\[1\] {{UNICASTConnectionTests.testBRemovingUnilaterally()}}


> UNICAST3: create receiver table when non-first message is received first
> ------------------------------------------------------------------------
>
>                 Key: JGRP-2327
>                 URL: https://issues.jboss.org/browse/JGRP-2327
>             Project: JGroups
>          Issue Type: Enhancement
>            Reporter: Bela Ban
>            Assignee: Bela Ban
>            Priority: Major
>             Fix For: 4.1.5
>
>
> * A and B
> * B sends 2 messages to A: B1 and B2
> * A receives B2 _before_ B1 (both B1 and B2 are OOB)
> * The current code has A drop B2 and B1 and send a SEND_FIRST_SEQNO message to B
> * B resends B1, but _not_ B2
> * Retransmission needs to kick in before A receives B2. This might take up to {{xmit_interval * 2}} ms before B2 is retransmitted and delivered
> h4. Scenario (JGRP-2293):
> * A installs a new view
> * B sends a LEAVE-REQ to A (B is leaving, too) on the view installation and a VIEW-ACK for the view. Both messages are unicasts to A and OOB
> * The VIEW-ACK (B2) is received first and dropped, so it will have to be retransmitted
> * This delays the view installation, as A waits for {{view_ack_collection_timeout}} ms until it has received all VIEW-ACKs
> h4. Workaround
> * Set GMS.leave_timeout to a higher value (say 8000ms)
> h4. Solution
> * When B2 is received, and it is not the first message and we don't have a receiver table for B yet, investigate whether we can create the receiver table anyway
> * However, this requires the first seqno from B *to always be 0*
> --> Investigate whether the first seqno in UNICAST3 is always 0, then this solution will work



--
This message was sent by Atlassian Jira
(v7.13.5#713005)


More information about the jboss-jira mailing list