Roman Puchkovskiy created IGNITE-18423:
------------------------------------------

             Summary: It is possible for a node to receive a message before the 
sender appears in topology
                 Key: IGNITE-18423
                 URL: https://issues.apache.org/jira/browse/IGNITE-18423
             Project: Ignite
          Issue Type: Bug
          Components: networking
            Reporter: Roman Puchkovskiy
             Fix For: 3.0.0-beta2


The scenario is as follows:
 # Two nodes (A and B) know about each other (i.e. each of them has the other 
node in its physical topology)
 # A network partition happens, so the nodes disappear from their counterparts' 
topologies
 # The partition disappears, and A starts seeing B (i.e. B gets added to A's 
view of the topology)
 # A sends a message to B using invoke
 # B fails to process the message (at least, it fails to send a response) 
because A is not yet seen by B (A is not in B's view of the topology)
 # B starts seeing A

The problem is that a channel might be established before the other side node 
is added to the topology.

It seems that there are two paths we could follow:
 # We don't use Scalecube's transport for sending messages; instead, we only 
use its discovery capabilities, and Scalecube uses our transport. As a result, 
our event listener (notified about a node being added to the topology) might be 
out of sync with the actual connection event. It is probable that Scalecube 
guarantees these events to be in sync, if its native transport is used. We 
could investigate how it does it (if it does) and see whether we can do the 
same.
 # Alternatively, a node establishing a connection might present itself (send 
the corresponding {{{}ClusterNode{}}}) as a part of a handshake procedure, and 
we could immediately simulate the corresponding event on the receiving side, 
hence closing the gap.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to