You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by vi...@apache.org on 2012/10/20 01:03:33 UTC
git commit: Require enabling cross-node timeouts patch by Vijay;
reviewed by jbellis for CASSANDRA-4812
Updated Branches:
refs/heads/trunk 15e3f142a -> a28a2ba93
Require enabling cross-node timeouts
patch by Vijay; reviewed by jbellis for CASSANDRA-4812
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a28a2ba9
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a28a2ba9
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a28a2ba9
Branch: refs/heads/trunk
Commit: a28a2ba93764c602268d17ce4e5604ba179428f4
Parents: 15e3f14
Author: Vijay Parthasarathy <vi...@gmail.com>
Authored: Fri Oct 19 15:58:37 2012 -0700
Committer: Vijay Parthasarathy <vi...@gmail.com>
Committed: Fri Oct 19 15:58:37 2012 -0700
----------------------------------------------------------------------
conf/cassandra.yaml | 8 ++++++++
src/java/org/apache/cassandra/config/Config.java | 2 ++
.../cassandra/config/DatabaseDescriptor.java | 5 +++++
.../cassandra/net/IncomingTcpConnection.java | 12 +++++++++---
4 files changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a28a2ba9/conf/cassandra.yaml
----------------------------------------------------------------------
diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml
index 0a261c8..37fc572 100644
--- a/conf/cassandra.yaml
+++ b/conf/cassandra.yaml
@@ -462,6 +462,14 @@ truncate_rpc_timeout_in_ms: 300000
# The default timeout for other, miscellaneous operations
rpc_timeout_in_ms: 10000
+# Enable operation timeout information exchange between nodes to accurately
+# measure request timeouts, If disabled cassandra will assuming the request
+# was forwarded to the replica instantly by the coordinator
+#
+# Warning: before enabling this property make sure to ntp is installed
+# and the times are synchronized between the nodes.
+cross_node_timeout: false
+
# Enable socket timeout for streaming operation.
# When a timeout occurs during streaming, streaming is retried from the start
# of the current file. This *can* involve re-streaming an important amount of
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a28a2ba9/src/java/org/apache/cassandra/config/Config.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java
index 732760b..c605a3a 100644
--- a/src/java/org/apache/cassandra/config/Config.java
+++ b/src/java/org/apache/cassandra/config/Config.java
@@ -58,6 +58,8 @@ public class Config
public Integer streaming_socket_timeout_in_ms = new Integer(0);
+ public boolean cross_node_timeout = false;
+
public volatile Double phi_convict_threshold = 8.0;
public Integer concurrent_reads = 8;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a28a2ba9/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 7d87c23..e615887 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -786,6 +786,11 @@ public class DatabaseDescriptor
conf.truncate_rpc_timeout_in_ms = timeOutInMillis;
}
+ public static boolean hasCrossNodeTimeout()
+ {
+ return conf.cross_node_timeout;
+ }
+
// not part of the Verb enum so we can change timeouts easily via JMX
public static long getTimeout(MessagingService.Verb verb)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a28a2ba9/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/IncomingTcpConnection.java b/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
index 949c5b6..cb989c2 100644
--- a/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
+++ b/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
@@ -24,6 +24,7 @@ import java.net.Socket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.gms.Gossiper;
import org.apache.cassandra.io.util.FastByteArrayInputStream;
import org.apache.cassandra.streaming.IncomingStreamReader;
@@ -178,9 +179,14 @@ public class IncomingTcpConnection extends Thread
input.readInt(); // size of entire message. in 1.0+ this is just a placeholder
String id = input.readUTF();
- long timestamp = version >= MessagingService.VERSION_12
- ? (System.currentTimeMillis() & 0xFFFFFFFF00000000L) | (((input.readInt() & 0xFFFFFFFFL) << 2) >> 2)
- : System.currentTimeMillis();
+ long timestamp = System.currentTimeMillis();;
+ if (version >= MessagingService.VERSION_12)
+ {
+ // make sure to readInt, even if cross_node_to is not enabled
+ int partial = input.readInt();
+ if (DatabaseDescriptor.hasCrossNodeTimeout())
+ timestamp = (timestamp & 0xFFFFFFFF00000000L) | (((partial & 0xFFFFFFFFL) << 2) >> 2);
+ }
MessageIn message = MessageIn.read(input, version, id);
if (message == null)