Recover from IOException in accept() thread patch by Mihial Stepura; reviewed by jbellis for CASSANDRA-6349
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/917bc05c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/917bc05c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/917bc05c Branch: refs/heads/trunk Commit: 917bc05c9fe5397714025678e990160722807aa4 Parents: 09b2470 Author: Jonathan Ellis <jbel...@apache.org> Authored: Sat Nov 16 10:26:15 2013 -0600 Committer: Jonathan Ellis <jbel...@apache.org> Committed: Sat Nov 16 10:26:15 2013 -0600 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../org/apache/cassandra/net/MessagingService.java | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/917bc05c/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index b6d2e73..b21e7a7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.3 + * Recover from IOException in accept() thread (CASSANDRA-6349) * Improve Gossip tolerance of abnormally slow tasks (CASSANDRA-6338) * Fix trying to hint timed out counter writes (CASSANDRA-6322) * Allow restoring specific columnfamilies from archived CL (CASSANDRA-4809) http://git-wip-us.apache.org/repos/asf/cassandra/blob/917bc05c/src/java/org/apache/cassandra/net/MessagingService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/net/MessagingService.java b/src/java/org/apache/cassandra/net/MessagingService.java index 9a9b997..36d5382 100644 --- a/src/java/org/apache/cassandra/net/MessagingService.java +++ b/src/java/org/apache/cassandra/net/MessagingService.java @@ -27,15 +27,16 @@ import java.util.*; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; + import javax.management.MBeanServer; import javax.management.ObjectName; import com.google.common.base.Function; import com.google.common.collect.Lists; + import org.cliffc.high_scale_lib.NonBlockingHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor; import org.apache.cassandra.concurrent.Stage; import org.apache.cassandra.concurrent.StageManager; @@ -50,6 +51,7 @@ import org.apache.cassandra.gms.GossipDigestAck; import org.apache.cassandra.gms.GossipDigestAck2; import org.apache.cassandra.gms.GossipDigestSyn; import org.apache.cassandra.io.IVersionedSerializer; +import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.locator.ILatencySubscriber; import org.apache.cassandra.metrics.ConnectionMetrics; import org.apache.cassandra.metrics.DroppedMessageMetrics; @@ -857,9 +859,10 @@ public final class MessagingService implements MessagingServiceMBean { while (true) { + Socket socket = null; try { - Socket socket = server.accept(); + socket = server.accept(); if (authenticate(socket)) { socket.setKeepAlive(true); @@ -889,17 +892,18 @@ public final class MessagingService implements MessagingServiceMBean catch (AsynchronousCloseException e) { // this happens when another thread calls close(). - logger.info("MessagingService shutting down server thread."); + logger.info("MessagingService shutting down server thread"); break; } catch (ClosedChannelException e) { - logger.debug("MessagingService server thread already closed."); + logger.debug("MessagingService server thread already closed"); break; } catch (IOException e) { - throw new RuntimeException(e); + logger.debug("Error reading the socket " + socket, e); + FileUtils.closeQuietly(socket); } } }