mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-29 19:21:01 +00:00
When a socket is created to serve a verb there may be no topology information regarding the target node. In this case current code configures socket as if the peer node lived in "default" dc and rack of the same name. If topology information appears later, the client is not re-connected, even though it could providing more relevant configuration (e.g. -- w/o encryption) This patch checks if the topology info is needed (sometimes it's not) and if missing it configures the socket in the most restrictive manner, but notes that the socket ignored the topology on creation. When topology info appears -- and this happens when a node joins the cluster -- the messaging service is kicked to drop all sockets that ignored the topology, so thay they reconnect later. The mentioned "kick" comes from storage service on-join notification. More correct fix would be if topology had on-change notification and messaging service subscribed on it, but there are two cons: - currently dc/rack do not change on the fly (though they can, e.g. if gossiping property file snitch is updated without restart) and topology update effectively comes from a single place - updating topology on token-metadata is not like topology.update() call. Instead, a clone of token metadata is created, then update happens on the clone, then the clone is committed into t.m. Though it's possible to find out commit-time which nodes changed their topology, but since it only happens on join this complexity likely doesn't worth the effort (yet) fixes: #11514 fixes: #11492 fixes: #11483 Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>