don't block SocketThread for MessagingService Patch by yangwei, reviewed by brandonwilliams for CASSANDRA-8188
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/eb0424ec Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/eb0424ec Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/eb0424ec Branch: refs/heads/cassandra-2.1 Commit: eb0424ecdef4fae4dd54050862c096b9976a9b01 Parents: 54b4b99 Author: Brandon Williams <brandonwilli...@apache.org> Authored: Mon Dec 1 13:43:16 2014 -0600 Committer: Brandon Williams <brandonwilli...@apache.org> Committed: Mon Dec 1 13:44:28 2014 -0600 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/net/MessagingService.java | 2 ++ src/java/org/apache/cassandra/net/OutboundTcpConnection.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb0424ec/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 57c0a26..3febed0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.12: + * don't block SocketThread for MessagingService (CASSANDRA-8188) * Increase quarantine delay on replacement (CASSANDRA-8260) * Expose off-heap memory usage stats (CASSANDRA-7897) * Ignore Paxos commits for truncated tables (CASSANDRA-7538) http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb0424ec/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 d2e65d8..117bd3c 100644 --- a/src/java/org/apache/cassandra/net/MessagingService.java +++ b/src/java/org/apache/cassandra/net/MessagingService.java @@ -908,6 +908,7 @@ public final class MessagingService implements MessagingServiceMBean } socket.setKeepAlive(true); + socket.setSoTimeout(2 * OutboundTcpConnection.WAIT_FOR_VERSION_MAX_TIME); // determine the connection type to decide whether to buffer DataInputStream in = new DataInputStream(socket.getInputStream()); MessagingService.validateMagic(in.readInt()); @@ -915,6 +916,7 @@ public final class MessagingService implements MessagingServiceMBean boolean isStream = MessagingService.getBits(header, 3, 1) == 1; int version = MessagingService.getBits(header, 15, 8); logger.debug("Connection version {} from {}", version, socket.getInetAddress()); + socket.setSoTimeout(0); Thread thread = isStream ? new IncomingStreamingConnection(version, socket) http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb0424ec/src/java/org/apache/cassandra/net/OutboundTcpConnection.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/net/OutboundTcpConnection.java b/src/java/org/apache/cassandra/net/OutboundTcpConnection.java index c1de563..ac9a1fb 100644 --- a/src/java/org/apache/cassandra/net/OutboundTcpConnection.java +++ b/src/java/org/apache/cassandra/net/OutboundTcpConnection.java @@ -55,7 +55,7 @@ public class OutboundTcpConnection extends Thread private volatile boolean isStopped = false; private static final int OPEN_RETRY_DELAY = 100; // ms between retries - private static final int WAIT_FOR_VERSION_MAX_TIME = 5000; + public static final int WAIT_FOR_VERSION_MAX_TIME = 5000; private static final int NO_VERSION = Integer.MIN_VALUE; // sending thread reads from "active" (one of queue1, queue2) until it is empty.