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