From d5beea4bba2f2ec62c763122465534adc4583faf Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Tue, 19 Mar 2013 11:20:47 +0100 Subject: [PATCH] if multicast socket closes, try and restart it also, throttle on socket failures, so it won't spin out of control... relates to #2783 --- .../zen/ping/multicast/MulticastZenPing.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/elasticsearch/discovery/zen/ping/multicast/MulticastZenPing.java b/src/main/java/org/elasticsearch/discovery/zen/ping/multicast/MulticastZenPing.java index f6f8c2fe62d..5117a4c320d 100644 --- a/src/main/java/org/elasticsearch/discovery/zen/ping/multicast/MulticastZenPing.java +++ b/src/main/java/org/elasticsearch/discovery/zen/ping/multicast/MulticastZenPing.java @@ -361,7 +361,23 @@ public class MulticastZenPing extends AbstractLifecycleComponent implem continue; } catch (Exception e) { if (running) { - logger.warn("failed to receive packet", e); + if (multicastSocket.isClosed()) { + logger.warn("multicast socket closed while running, restarting..."); + // for some reason, the socket got closed on us while we are still running + // make a best effort in trying to start the multicast socket again... + threadPool.generic().execute(new Runnable() { + @Override + public void run() { + MulticastZenPing.this.stop(); + MulticastZenPing.this.start(); + } + }); + running = false; + return; + } else { + logger.warn("failed to receive packet, throttling...", e); + Thread.sleep(500); + } } continue; } @@ -407,7 +423,9 @@ public class MulticastZenPing extends AbstractLifecycleComponent implem handleNodePingRequest(id, requestingNodeX, clusterName); } } catch (Exception e) { - logger.warn("unexpected exception in multicast receiver", e); + if (running) { + logger.warn("unexpected exception in multicast receiver", e); + } } } }