# IGNITE-709 Fix problem in TcpDiscoverySpi.RingMessageWorker#processClientReconnectMessage()
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/eda676b5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/eda676b5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/eda676b5 Branch: refs/heads/ignite-709 Commit: eda676b543d80319105e8e75cf1cf34e65ac8c81 Parents: 49a1c7e Author: sevdokimov <sergey.evdoki...@jetbrains.com> Authored: Sun Apr 19 19:11:14 2015 +0300 Committer: sevdokimov <sergey.evdoki...@jetbrains.com> Committed: Sun Apr 19 19:11:14 2015 +0300 ---------------------------------------------------------------------- .../spi/discovery/tcp/TcpDiscoverySpi.java | 76 +++++++++++--------- 1 file changed, 41 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/eda676b5/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java index 5245826..d69ca0c 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java @@ -3408,54 +3408,60 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov assert isLocNodeRouter; msg.verify(locNodeId); + + if (ring.hasRemoteNodes()) { + sendMessageAcrossRing(msg); + + return; + } } - else { - UUID nodeId = msg.creatorNodeId(); - TcpDiscoveryNode node = ring.node(nodeId); + UUID nodeId = msg.creatorNodeId(); - assert node == null || node.isClient(); + TcpDiscoveryNode node = ring.node(nodeId); - if (node != null) { - assert node.isClient(); + assert node == null || node.isClient(); - node.clientRouterNodeId(msg.routerNodeId()); - node.aliveCheck(maxMissedClientHbs); + if (node != null) { + assert node.isClient(); - if (isLocalNodeCoordinator()) { - Collection<TcpDiscoveryAbstractMessage> pending = - pendingMsgs.messages(msg.lastMessageId()); + node.clientRouterNodeId(msg.routerNodeId()); + node.aliveCheck(maxMissedClientHbs); - if (pending != null) { - msg.pendingMessages(pending); - msg.success(true); - } - else { - if (log.isDebugEnabled()) - log.debug("Failing reconnecting client node because failed to restore pending " + - "messages [locNodeId=" + locNodeId + ", clientNodeId=" + nodeId + ']'); + if (isLocalNodeCoordinator()) { + Collection<TcpDiscoveryAbstractMessage> pending = + pendingMsgs.messages(msg.lastMessageId()); - processNodeFailedMessage(new TcpDiscoveryNodeFailedMessage(locNodeId, - node.id(), node.internalOrder())); - } + if (pending != null) { + msg.pendingMessages(pending); + msg.success(true); } - } - else if (log.isDebugEnabled()) - log.debug("Reconnecting client node is already failed [nodeId=" + nodeId + ']'); - - if (isLocNodeRouter) { - ClientMessageWorker wrk = clientMsgWorkers.get(nodeId); + else { + if (log.isDebugEnabled()) + log.debug("Failing reconnecting client node because failed to restore pending " + + "messages [locNodeId=" + locNodeId + ", clientNodeId=" + nodeId + ']'); - if (wrk != null) - wrk.addMessage(msg); - else if (log.isDebugEnabled()) - log.debug("Failed to reconnect client node (disconnected during the process) [locNodeId=" + - locNodeId + ", clientNodeId=" + nodeId + ']'); + processNodeFailedMessage(new TcpDiscoveryNodeFailedMessage(locNodeId, + node.id(), node.internalOrder())); + } } } + else if (log.isDebugEnabled()) + log.debug("Reconnecting client node is already failed [nodeId=" + nodeId + ']'); - if (ring.hasRemoteNodes()) - sendMessageAcrossRing(msg); + if (isLocNodeRouter) { + ClientMessageWorker wrk = clientMsgWorkers.get(nodeId); + + if (wrk != null) + wrk.addMessage(msg); + else if (log.isDebugEnabled()) + log.debug("Failed to reconnect client node (disconnected during the process) [locNodeId=" + + locNodeId + ", clientNodeId=" + nodeId + ']'); + } + else { + if (ring.hasRemoteNodes()) + sendMessageAcrossRing(msg); + } } /**