This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit a6ada75cdf365b611eec1a8933e05ade18557ec9 Author: Benoit Tellier <[email protected]> AuthorDate: Fri Mar 27 10:15:45 2020 +0700 JAMES-3137 Create a cache Keyspace --- .../backends/cassandra/init/KeyspaceFactory.java | 20 +++++++++++++++---- .../init/configuration/ClusterConfiguration.java | 23 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/KeyspaceFactory.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/KeyspaceFactory.java index ce6a227..b931272 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/KeyspaceFactory.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/KeyspaceFactory.java @@ -35,27 +35,39 @@ public class KeyspaceFactory { private static final String SYSTEM_SCHEMA = "system_schema"; private static final String KEYSPACES = "keyspaces"; private static final String KEYSPACE_NAME = "keyspace_name"; + private static final int CACHE_REPLICATION_FACTOR = 1; public static void createKeyspace(ClusterConfiguration clusterConfiguration, Cluster cluster) { if (clusterConfiguration.shouldCreateKeyspace()) { doCreateKeyspace(clusterConfiguration, cluster); + doCreateCacheKeyspace(clusterConfiguration, cluster); } } private static void doCreateKeyspace(ClusterConfiguration clusterConfiguration, Cluster cluster) { + createKeyspace(cluster, clusterConfiguration.getKeyspace(), + clusterConfiguration.getReplicationFactor(), + clusterConfiguration.isDurableWrites()); + } + + private static void createKeyspace(Cluster cluster, String keyspace, int replicationFactor, boolean durableWrites) { try (Session session = cluster.connect()) { - if (!keyspaceExist(cluster, clusterConfiguration.getKeyspace())) { - session.execute(SchemaBuilder.createKeyspace(clusterConfiguration.getKeyspace()) + if (!keyspaceExist(cluster, keyspace)) { + session.execute(SchemaBuilder.createKeyspace(keyspace) .with() .replication(ImmutableMap.<String, Object>builder() .put("class", "SimpleStrategy") - .put("replication_factor", clusterConfiguration.getReplicationFactor()) + .put("replication_factor", replicationFactor) .build()) - .durableWrites(clusterConfiguration.isDurableWrites())); + .durableWrites(durableWrites)); } } } + private static void doCreateCacheKeyspace(ClusterConfiguration clusterConfiguration, Cluster cluster) { + createKeyspace(cluster, clusterConfiguration.getCacheKeyspace(), CACHE_REPLICATION_FACTOR, clusterConfiguration.isDurableWrites()); + } + @VisibleForTesting public static boolean keyspaceExist(Cluster cluster, String keyspaceName) { try (Session session = cluster.connect(SYSTEM_SCHEMA)) { diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java index 09a10b0..cb56e8a 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java @@ -39,6 +39,7 @@ public class ClusterConfiguration { private ImmutableList.Builder<Host> hosts; private boolean createKeyspace; private Optional<String> keyspace; + private Optional<String> cacheKeyspace; private Optional<Integer> replicationFactor; private Optional<Integer> minDelay; private Optional<Integer> maxRetry; @@ -55,6 +56,7 @@ public class ClusterConfiguration { hosts = ImmutableList.builder(); createKeyspace = false; keyspace = Optional.empty(); + cacheKeyspace = Optional.empty(); replicationFactor = Optional.empty(); minDelay = Optional.empty(); maxRetry = Optional.empty(); @@ -93,6 +95,15 @@ public class ClusterConfiguration { return this; } + public Builder cacheKeyspace(Optional<String> cacheKeyspace) { + this.keyspace = keyspace; + return this; + } + + public Builder cacheKeyspace(String cacheKeyspace) { + return cacheKeyspace(Optional.of(cacheKeyspace)); + } + public Builder keyspace(String keyspace) { return keyspace(Optional.of(keyspace)); } @@ -198,6 +209,7 @@ public class ClusterConfiguration { hosts.build(), createKeyspace, keyspace.orElse(DEFAULT_KEYSPACE), + cacheKeyspace.orElse(DEFAULT_CACHE_KEYSPACE), replicationFactor.orElse(DEFAULT_REPLICATION_FACTOR), minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY), maxRetry.orElse(DEFAULT_CONNECTION_MAX_RETRIES), @@ -215,6 +227,7 @@ public class ClusterConfiguration { private static final String CASSANDRA_NODES = "cassandra.nodes"; public static final String CASSANDRA_CREATE_KEYSPACE = "cassandra.keyspace.create"; public static final String CASSANDRA_KEYSPACE = "cassandra.keyspace"; + public static final String CASSANDRA_CACHE_KEYSPACE = "cassandra.keyspace.cache"; public static final String CASSANDRA_USER = "cassandra.user"; public static final String CASSANDRA_PASSWORD = "cassandra.password"; public static final String CASSANDRA_SSL = "cassandra.ssl"; @@ -225,6 +238,7 @@ public class ClusterConfiguration { public static final String CONNECTION_RETRY_MIN_DELAY = "cassandra.retryConnection.minDelay"; private static final String DEFAULT_KEYSPACE = "apache_james"; + private static final String DEFAULT_CACHE_KEYSPACE = "apache_james_cache"; private static final int DEFAULT_REPLICATION_FACTOR = 1; private static final int DEFAULT_CONNECTION_MAX_RETRIES = 10; private static final int DEFAULT_CONNECTION_MIN_DELAY = 5000; @@ -246,6 +260,7 @@ public class ClusterConfiguration { ClusterConfiguration.Builder builder = ClusterConfiguration.builder() .hosts(listCassandraServers(configuration)) .keyspace(Optional.ofNullable(configuration.getString(CASSANDRA_KEYSPACE, null))) + .cacheKeyspace(Optional.ofNullable(configuration.getString(CASSANDRA_CACHE_KEYSPACE, null))) .replicationFactor(Optional.ofNullable(configuration.getInteger(REPLICATION_FACTOR, null))) .minDelay(Optional.ofNullable(configuration.getInteger(CONNECTION_RETRY_MIN_DELAY, null))) .maxRetry(Optional.ofNullable(configuration.getInteger(CONNECTION_MAX_RETRY, null))) @@ -304,6 +319,7 @@ public class ClusterConfiguration { private final List<Host> hosts; private final boolean createKeyspace; private final String keyspace; + private final String cacheKeyspace; private final int replicationFactor; private final int minDelay; private final int maxRetry; @@ -316,13 +332,14 @@ public class ClusterConfiguration { private final Optional<String> password; private final boolean durableWrites; - public ClusterConfiguration(List<Host> hosts, boolean createKeyspace, String keyspace, int replicationFactor, int minDelay, int maxRetry, + public ClusterConfiguration(List<Host> hosts, boolean createKeyspace, String keyspace, String cacheKeyspace, int replicationFactor, int minDelay, int maxRetry, Optional<QueryLoggerConfiguration> queryLoggerConfiguration, Optional<PoolingOptions> poolingOptions, int readTimeoutMillis, int connectTimeoutMillis, boolean useSsl, Optional<String> username, Optional<String> password, boolean durableWrites) { this.hosts = hosts; this.createKeyspace = createKeyspace; this.keyspace = keyspace; + this.cacheKeyspace = cacheKeyspace; this.replicationFactor = replicationFactor; this.minDelay = minDelay; this.maxRetry = maxRetry; @@ -352,6 +369,10 @@ public class ClusterConfiguration { return keyspace; } + public String getCacheKeyspace() { + return cacheKeyspace; + } + public int getReplicationFactor() { return replicationFactor; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
