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]

Reply via email to