From 67a2ef8a251e1d87f5183af286ab2c8b499e139e Mon Sep 17 00:00:00 2001 From: Yannick Welsch Date: Thu, 9 Nov 2017 10:25:15 +0100 Subject: [PATCH] Stop responding to ping requests before master abdication When a master node shuts down, it sends a leave request to the other nodes so that they can eagerly start a 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 appeared to be an active master. This commit makes sure that UnicastZenPing does not respond to ping requests once it's been closed. ZenDiscovery.doStop() ensures to first close the pinging component before it triggers a master election. --- .../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