You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dg...@apache.org on 2019/02/20 10:46:52 UTC
[ignite] branch master updated: IGNITE-11348 Fix ping node
procedure may fail when another node leaves the cluster - Fixes #6124.
This is an automated email from the ASF dual-hosted git repository.
dgovorukhin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 22279ba IGNITE-11348 Fix ping node procedure may fail when another node leaves the cluster - Fixes #6124.
22279ba is described below
commit 22279ba08f391f0f1ecc0ac3c8c886aaefb3862d
Author: Sergey Chugunov <se...@gmail.com>
AuthorDate: Wed Feb 20 13:46:20 2019 +0300
IGNITE-11348 Fix ping node procedure may fail when another node leaves the cluster - Fixes #6124.
Signed-off-by: Dmitriy Govorukhin <dm...@gmail.com>
---
.../apache/ignite/spi/discovery/tcp/ServerImpl.java | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index d5149ee..15af509 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -726,7 +726,7 @@ class ServerImpl extends TcpDiscoveryImpl {
return F.t(getLocalNodeId(), clientPingRes);
}
- GridPingFutureAdapter<IgniteBiTuple<UUID, Boolean>> fut = new GridPingFutureAdapter<>();
+ GridPingFutureAdapter<IgniteBiTuple<UUID, Boolean>> fut = new GridPingFutureAdapter<>(nodeId);
GridPingFutureAdapter<IgniteBiTuple<UUID, Boolean>> oldFut = pingMap.putIfAbsent(addr, fut);
@@ -848,9 +848,11 @@ class ServerImpl extends TcpDiscoveryImpl {
for (InetSocketAddress addr : spi.getNodeAddresses(node)) {
GridPingFutureAdapter fut = pingMap.get(addr);
- if (fut != null && fut.sock != null)
- // Reference to the socket is not set to null. No need to assign it to a local variable.
- U.closeQuiet(fut.sock);
+ if (fut != null && fut.sock != null) {
+ if (fut.nodeId == null || fut.nodeId.equals(node.id()))
+ // Reference to the socket is not set to null. No need to assign it to a local variable.
+ U.closeQuiet(fut.sock);
+ }
}
}
@@ -7537,10 +7539,20 @@ class ServerImpl extends TcpDiscoveryImpl {
*
*/
private static class GridPingFutureAdapter<R> extends GridFutureAdapter<R> {
+ /** ID of node ping request is sent to. */
+ private final UUID nodeId;
+
/** Socket. */
private volatile Socket sock;
/**
+ * @param nodeId ID of node ping request is sent to.
+ */
+ GridPingFutureAdapter(@Nullable UUID nodeId) {
+ this.nodeId = nodeId;
+ }
+
+ /**
* Returns socket associated with this ping future.
*
* @return Socket or {@code null} if no socket associated.