Details
-
Bug
-
Resolution: Done
-
Major
-
None
-
None
Description
In TCPGOSSIP, the GossipRouter stores logical address (UUID), logical name (e.g. "A") and physical address (e.g. 192.168.1.5:7800) of each member. When a member P runs the discovery in TCPGOSSIP, it fetches all of this information, so it can send messages to all members in its cluster.
However, when member Q, who hasn't yet run a discovery (e.g. as part of MERGE2), needs to send a message back to P, since P's physical address won't be known yet, this will fail.
A concrete uses case is this:
- A has joined the cluster, became the coordinator as only member and registered with the GossipRouter
- B runs the discovery protocol, fetches information about A from GossipRouter in a first phase
- In a second phase, B sends a GET_MBRS_REQ to A, this works as B knows A's physical address
- A receives B's request and wants to send a GET_MBRS_RSP back to B
- However, as A didn't include its own physical address, A won't be able to send a message back to B ! Therefore B doesn't join the cluster, and will only later be merged with A !
- Only after the periodic merge kicks in, which runs a discovery on A, will A get B's physical address and will be able to talk to B !
==> SOLUTION: simple, B sends it metadata (physical address, logical name) with the GET_MBRS_REQ to A, so A will have B's physical address to send a message back to B. This is actually done in the other discovery protocols as well, e.g. TCPPING or PING...