Ivan Bessonov created IGNITE-20087: -------------------------------------- Summary: Account for "nodeId" while sending the message Key: IGNITE-20087 URL: https://issues.apache.org/jira/browse/IGNITE-20087 Project: Ignite Issue Type: Improvement Reporter: Ivan Bessonov
h3. Disclaimer This change will, most likely, break some existing code. h3. The problem It is safe to assume, that the node shouldn't be able to send a message to another node that doesn't exist. The way we solve this problem is sending a message only to nodes that have corresponding {{ClusterNode}} instance, that contains the address. There are shortcuts in MessagingService, some methods only take the "consistentId" parameter, but they really only send the message if there's a known ClusterNode instance. Internally, to identify the receiver, we use a pair \{consistentId, address}. And it seems like this is not a good identifier. Following are the reasons: * Node may reconnect with a different address * Node may restart on the same address In first case, everything should still work, but currently it, most likely, won't. In the second case, it shouldn't work, because we were trying to send the data to the "old" node instance, assuming that it is statefull and is aware of the possibility of such message. But it will work. h3. The solution To resolve these issues, we need to: * validate the "nodeId", also known as a "launchId", of the connection, and only use it if the actual value matches the expected one. If it doesn't, then somebody has outdated ClusterNode instance, and they should be punished; * don't use address as a part of the primary identifier of the channel. This may require a substantial reworking of the way we process cluster nodes right now, making it similar to the implementation in Ignite 2. -- This message was sent by Atlassian Jira (v8.20.10#820010)