Repository: james-project
Updated Branches:
  refs/heads/master 55b58b859 -> bab5ff434


JAMES-2011 Add the Cassandra driver read timeout


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bab5ff43
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bab5ff43
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bab5ff43

Branch: refs/heads/master
Commit: bab5ff434c407b98432cdc9af00b0263184de26a
Parents: 55b58b8
Author: Antoine Duprat <adup...@linagora.com>
Authored: Wed Apr 26 14:34:53 2017 +0200
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Wed Apr 26 14:34:53 2017 +0200

----------------------------------------------------------------------
 .../james/backends/cassandra/init/ClusterBuilder.java   | 12 ++++++++++++
 .../james/modules/mailbox/CassandraSessionModule.java   |  8 ++++++--
 server/src/site/xdoc/config-cassandra.xml               |  4 ++++
 3 files changed, 22 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/bab5ff43/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
----------------------------------------------------------------------
diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
index ec504dc..2a89280 100644
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
@@ -26,6 +26,7 @@ import org.apache.james.util.Host;
 
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.QueryOptions;
+import com.datastax.driver.core.SocketOptions;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
@@ -49,6 +50,7 @@ public class ClusterBuilder {
     private boolean forTest;
 
     private Optional<QueryLoggerConfiguration> queryLogger;
+    private Optional<Integer> readTimeoutMillis;
 
     private ClusterBuilder() {
         username = Optional.empty();
@@ -62,6 +64,7 @@ public class ClusterBuilder {
         forTest = false;
 
         queryLogger = Optional.empty();
+        readTimeoutMillis = Optional.empty();
     }
 
     public ClusterBuilder username(String username) {
@@ -118,6 +121,11 @@ public class ClusterBuilder {
         return this;
     }
 
+    public ClusterBuilder readTimeoutMillis(int readTimeoutMillis) {
+        this.readTimeoutMillis = Optional.of(readTimeoutMillis);
+        return this;
+    }
+
     public Cluster build() {
         Preconditions.checkState(!(servers.isPresent() && host.isPresent()), 
"You can't specify a list of servers and a host at the same time");
         Preconditions.checkState(!(servers.isPresent() && port.isPresent()), 
"You can't specify a list of servers and a port at the same time");
@@ -138,6 +146,10 @@ public class ClusterBuilder {
                 new QueryOptions()
                     
.setRefreshSchemaIntervalMillis(refreshSchemaIntervalMillis)));
 
+        readTimeoutMillis.map(timeout ->
+            clusterBuilder.withSocketOptions(
+                    new SocketOptions().setReadTimeoutMillis(timeout)));
+
         Cluster cluster = clusterBuilder.build();
 
         queryLogger.map(queryLoggerConfiguration ->

http://git-wip-us.apache.org/repos/asf/james-project/blob/bab5ff43/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index 9f11022..7aaa6d9 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -65,6 +65,8 @@ public class CassandraSessionModule extends AbstractModule {
     private static final String DEFAULT_KEYSPACE = "apache_james";
     private static final String CASSANDRA_NODES = "cassandra.nodes";
     private static final String LOCALHOST = "127.0.0.1";
+    private static final int DEFAULT_READ_TIMEOUT_MILLIS = 5000;
+
 
     @Override
     protected void configure() {
@@ -113,15 +115,17 @@ public class CassandraSessionModule extends 
AbstractModule {
         LOGGER.info("Trying to connect to Cassandra service");
 
         return context -> ClusterWithKeyspaceCreatedFactory
-            .config(getCluster(servers, queryLoggerConfiguration), 
configuration.getString("cassandra.keyspace", DEFAULT_KEYSPACE))
+            .config(getCluster(servers, queryLoggerConfiguration, 
configuration.getInt("cassandra.readTimeoutMillis", 
DEFAULT_READ_TIMEOUT_MILLIS)), 
+                    configuration.getString("cassandra.keyspace", 
DEFAULT_KEYSPACE))
             
.replicationFactor(configuration.getInt("cassandra.replication.factor", 
DEFAULT_REPLICATION_FACTOR))
             .clusterWithInitializedKeyspace();
     }
 
-    private Cluster getCluster(List<Host> servers, QueryLoggerConfiguration 
queryLoggerConfiguration) {
+    private Cluster getCluster(List<Host> servers, QueryLoggerConfiguration 
queryLoggerConfiguration, int readTimeoutMillis) {
         return ClusterBuilder.builder()
             .servers(servers)
             .queryLoggerConfiguration(queryLoggerConfiguration)
+            .readTimeoutMillis(readTimeoutMillis)
             .build();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/bab5ff43/server/src/site/xdoc/config-cassandra.xml
----------------------------------------------------------------------
diff --git a/server/src/site/xdoc/config-cassandra.xml 
b/server/src/site/xdoc/config-cassandra.xml
index 484fbb0..e6c3a7d 100644
--- a/server/src/site/xdoc/config-cassandra.xml
+++ b/server/src/site/xdoc/config-cassandra.xml
@@ -60,6 +60,10 @@
         
<dt><strong>cassandra.query.logger.max.parameter.value.length</strong></dt>
         <dd>Default is 
com.datastax.driver.core.QueryLogger.DEFAULT_MAX_PARAMETER_VALUE_LENGTH.
           The maximum length of query parameter value that can be logged by 
the cassandra driver</dd>
+
+        <dt><strong>cassandra.readTimeoutMillis</strong></dt>
+        <dd>Optional.
+          If specified defines the Cassandra <a 
href="http://docs.datastax.com/en/developer/java-driver/2.1/manual/socket_options/"";>driver
 read timeout</a></dd>
       </dl>
 
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to