From 70b62a247c36e4780092a1b317a537d88a465c36 Mon Sep 17 00:00:00 2001 From: Yannick Welsch Date: Mon, 13 Nov 2017 15:18:59 +0100 Subject: [PATCH] Stop responding to ping requests before master abdication (#27329) When the current master node is shutting down, it sends a leave request to the other nodes so that they can eagerly start a fresh master election. Unfortunately, it was still possible for the master node that was shutting down to respond to ping requests, possibly influencing the election decision as it still appeared as an active master in the ping responses. This commit ensures that UnicastZenPing does not respond to ping requests once it's been closed. ZenDiscovery.doStop() continues to ensure that the pinging component is first closed before it triggers a master election. Closes #27328 --- .../elasticsearch/discovery/zen/UnicastZenPing.java | 6 +++++- .../discovery/zen/UnicastZenPingTests.java | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/elasticsearch/discovery/zen/UnicastZenPing.java b/core/src/main/java/org/elasticsearch/discovery/zen/UnicastZenPing.java index d0a9a212bdd14..06269706e0d5f 100644 --- a/core/src/main/java/org/elasticsearch/discovery/zen/UnicastZenPing.java +++ b/core/src/main/java/org/elasticsearch/discovery/zen/UnicastZenPing.java @@ -575,7 +575,8 @@ public void handleResponse(UnicastPingResponse response) { @Override public void handleException(TransportException exp) { - if (exp instanceof ConnectTransportException || exp.getCause() instanceof ConnectTransportException) { + if (exp instanceof ConnectTransportException || exp.getCause() instanceof ConnectTransportException || + exp.getCause() instanceof AlreadyClosedException) { // ok, not connected... logger.trace((Supplier) () -> new ParameterizedMessage("failed to connect to {}", node), exp); } else if (closed == false) { @@ -608,6 +609,9 @@ class UnicastPingRequestHandler implements TransportRequestHandler