This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit bcf4d36500fb8a7ce7d272929621c6e7ec7d042b
Author: Antoine DUPRAT <adup...@linagora.com>
AuthorDate: Tue Nov 12 12:07:33 2019 +0100

    JAMES-2981 Keyspace creation should be optional
---
 .../backends/cassandra/init/KeyspaceFactory.java   |  6 ++++
 .../init/configuration/ClusterConfiguration.java   | 33 ++++++++++++++++++----
 .../james/backends/cassandra/CassandraCluster.java |  1 +
 .../SessionWithInitializedTablesFactoryTest.java   |  1 +
 .../destination/conf/cassandra.properties          |  1 +
 .../destination/conf/cassandra.properties          |  1 +
 .../destination/conf/cassandra.properties          |  1 +
 .../destination/conf/cassandra.properties          |  1 +
 .../CassandraRabbitMQAwsS3SmtpTestRuleFactory.java |  1 +
 .../mpt/smtp/CassandraSmtpTestRuleFactory.java     |  1 +
 .../AuthenticatedCassandraJamesServerTest.java     |  1 +
 .../james/CassandraAuthenticationExtension.java    |  1 +
 .../org/apache/james/CassandraNodeConfTest.java    |  1 +
 .../java/org/apache/james/DockerCassandraRule.java |  1 +
 14 files changed, 46 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 3f71803..be1630b 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
@@ -26,6 +26,12 @@ import com.datastax.driver.core.Session;
 
 public class KeyspaceFactory {
     public static void createKeyspace(ClusterConfiguration 
clusterConfiguration, Cluster cluster) {
+        if (clusterConfiguration.shouldCreateKeyspace()) {
+            doCreateKeyspace(clusterConfiguration, cluster);
+        }
+    }
+
+    private static void doCreateKeyspace(ClusterConfiguration 
clusterConfiguration, Cluster cluster) {
         try (Session session = cluster.connect()) {
             session.execute("CREATE KEYSPACE IF NOT EXISTS " + 
clusterConfiguration.getKeyspace()
                 + " WITH replication = {'class':'SimpleStrategy', 
'replication_factor':" + clusterConfiguration.getReplicationFactor() + "}"
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 d310627..09a10b0 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
@@ -37,6 +37,7 @@ public class ClusterConfiguration {
 
     public static class Builder {
         private ImmutableList.Builder<Host> hosts;
+        private boolean createKeyspace;
         private Optional<String> keyspace;
         private Optional<Integer> replicationFactor;
         private Optional<Integer> minDelay;
@@ -52,6 +53,7 @@ public class ClusterConfiguration {
 
         public Builder() {
             hosts = ImmutableList.builder();
+            createKeyspace = false;
             keyspace = Optional.empty();
             replicationFactor = Optional.empty();
             minDelay = Optional.empty();
@@ -81,6 +83,11 @@ public class ClusterConfiguration {
             return this;
         }
 
+        public Builder createKeyspace() {
+            this.createKeyspace = true;
+            return this;
+        }
+
         public Builder keyspace(Optional<String> keyspace) {
             this.keyspace = keyspace;
             return this;
@@ -189,6 +196,7 @@ public class ClusterConfiguration {
         public ClusterConfiguration build() {
             return new ClusterConfiguration(
                 hosts.build(),
+                createKeyspace,
                 keyspace.orElse(DEFAULT_KEYSPACE),
                 replicationFactor.orElse(DEFAULT_REPLICATION_FACTOR),
                 minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY),
@@ -205,6 +213,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_USER = "cassandra.user";
     public static final String CASSANDRA_PASSWORD = "cassandra.password";
@@ -230,7 +239,11 @@ public class ClusterConfiguration {
     }
 
     public static ClusterConfiguration from(Configuration configuration) {
-        return ClusterConfiguration.builder()
+        boolean createKeySpace = 
Optional.ofNullable(configuration.getBoolean(CASSANDRA_CREATE_KEYSPACE, null))
+            .filter(Boolean::booleanValue)
+            .isPresent();
+
+        ClusterConfiguration.Builder builder = ClusterConfiguration.builder()
             .hosts(listCassandraServers(configuration))
             
.keyspace(Optional.ofNullable(configuration.getString(CASSANDRA_KEYSPACE, 
null)))
             
.replicationFactor(Optional.ofNullable(configuration.getInteger(REPLICATION_FACTOR,
 null)))
@@ -242,8 +255,11 @@ public class ClusterConfiguration {
             
.connectTimeoutMillis(Optional.ofNullable(configuration.getInteger(CONNECT_TIMEOUT_MILLIS,
 null)))
             
.useSsl(Optional.ofNullable(configuration.getBoolean(CASSANDRA_SSL, null)))
             
.username(Optional.ofNullable(configuration.getString(CASSANDRA_USER, null)))
-            
.password(Optional.ofNullable(configuration.getString(CASSANDRA_PASSWORD, 
null)))
-            .build();
+            
.password(Optional.ofNullable(configuration.getString(CASSANDRA_PASSWORD, 
null)));
+        if (createKeySpace) {
+            builder = builder.createKeyspace();
+        }
+        return builder.build();
     }
 
     private static List<Host> listCassandraServers(Configuration 
configuration) {
@@ -286,6 +302,7 @@ public class ClusterConfiguration {
     }
 
     private final List<Host> hosts;
+    private final boolean createKeyspace;
     private final String keyspace;
     private final int replicationFactor;
     private final int minDelay;
@@ -299,11 +316,12 @@ public class ClusterConfiguration {
     private final Optional<String> password;
     private final boolean durableWrites;
 
-    public ClusterConfiguration(List<Host> hosts, String keyspace, int 
replicationFactor, int minDelay, int maxRetry,
+    public ClusterConfiguration(List<Host> hosts, boolean createKeyspace, 
String keyspace, 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.replicationFactor = replicationFactor;
         this.minDelay = minDelay;
@@ -326,6 +344,10 @@ public class ClusterConfiguration {
         return hosts;
     }
 
+    public boolean shouldCreateKeyspace() {
+        return createKeyspace;
+    }
+
     public String getKeyspace() {
         return keyspace;
     }
@@ -378,6 +400,7 @@ public class ClusterConfiguration {
             return Objects.equals(this.minDelay, that.minDelay)
                 && Objects.equals(this.maxRetry, that.maxRetry)
                 && Objects.equals(this.hosts, that.hosts)
+                && Objects.equals(this.createKeyspace, that.createKeyspace)
                 && Objects.equals(this.keyspace, that.keyspace)
                 && Objects.equals(this.replicationFactor, 
that.replicationFactor)
                 && Objects.equals(this.queryLoggerConfiguration, 
that.queryLoggerConfiguration)
@@ -393,7 +416,7 @@ public class ClusterConfiguration {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(hosts, keyspace, replicationFactor, minDelay, 
maxRetry, queryLoggerConfiguration, poolingOptions,
+        return Objects.hash(hosts, createKeyspace, keyspace, 
replicationFactor, minDelay, maxRetry, queryLoggerConfiguration, poolingOptions,
             readTimeoutMillis, connectTimeoutMillis, username, useSsl, 
password);
     }
 }
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
index d83fc26..f4be201 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
@@ -60,6 +60,7 @@ public final class CassandraCluster implements AutoCloseable {
             ClusterConfiguration clusterConfiguration = 
ClusterConfiguration.builder()
                 .host(host)
                 .keyspace(KEYSPACE)
+                .createKeyspace()
                 .disableDurableWrites()
                 .build();
             cluster = ClusterFactory.create(clusterConfiguration);
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java
index 3235b40..fb557e2 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java
@@ -123,6 +123,7 @@ class SessionWithInitializedTablesFactoryTest {
         ClusterConfiguration clusterConfiguration = 
ClusterConfiguration.builder()
             .host(cassandraServer.getHost())
             .keyspace(KEYSPACE)
+            .createKeyspace()
             .replicationFactor(1)
             .disableDurableWrites()
             .build();
diff --git 
a/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties 
b/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties
index cebfe65..0e19020 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties
@@ -2,6 +2,7 @@
 # Read https://james.apache.org/server/config-cassandra.html for further 
details
 
 cassandra.nodes=cassandra
+cassandra.keyspace.create=true
 cassandra.keyspace=apache_james
 #cassandra.user=cassandra
 #cassandra.password=cassandra
diff --git 
a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/cassandra.properties
 
b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/cassandra.properties
index 842f56d..137b2cc 100644
--- 
a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/cassandra.properties
+++ 
b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/cassandra.properties
@@ -2,6 +2,7 @@
 # Read https://james.apache.org/server/config-cassandra.html for further 
details
 
 cassandra.nodes=cassandra
+cassandra.keyspace.create=true
 cassandra.keyspace=apache_james
 #cassandra.user=cassandra
 #cassandra.password=cassandra
diff --git 
a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/cassandra.properties
 
b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/cassandra.properties
index 842f56d..137b2cc 100644
--- 
a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/cassandra.properties
+++ 
b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/cassandra.properties
@@ -2,6 +2,7 @@
 # Read https://james.apache.org/server/config-cassandra.html for further 
details
 
 cassandra.nodes=cassandra
+cassandra.keyspace.create=true
 cassandra.keyspace=apache_james
 #cassandra.user=cassandra
 #cassandra.password=cassandra
diff --git 
a/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties 
b/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties
index 413a2ad..b96beef 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties
+++ b/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties
@@ -2,6 +2,7 @@
 # Read https://james.apache.org/server/config-cassandra.html for further 
details
 
 cassandra.nodes=cassandra
+cassandra.keyspace.create=true
 cassandra.keyspace=apache_james
 #cassandra.user=cassandra
 #cassandra.password=cassandra
diff --git 
a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
 
b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
index 5229411..91cebea 100644
--- 
a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
+++ 
b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
@@ -67,6 +67,7 @@ public final class CassandraRabbitMQAwsS3SmtpTestRuleFactory {
                     ClusterConfiguration.builder()
                         .host(cassandraHost)
                         .keyspace("testing")
+                        .createKeyspace()
                         .replicationFactor(1)
                         .build()),
                 binder -> binder.bind(DNSService.class).toInstance(dnsService),
diff --git 
a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java
 
b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java
index f8f95ff..322bca0 100644
--- 
a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java
+++ 
b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java
@@ -55,6 +55,7 @@ public final class CassandraSmtpTestRuleFactory {
                     ClusterConfiguration.builder()
                         .host(cassandraHost)
                         .keyspace("testing")
+                        .createKeyspace()
                         .replicationFactor(1)
                         .build()),
                 binder -> 
binder.bind(DNSService.class).toInstance(dnsService));
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
index 48a450c..3bb5636 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
@@ -68,6 +68,7 @@ class AuthenticatedCassandraJamesServerTest {
                 .toInstance(ClusterConfiguration.builder()
                     .host(cassandraExtension.getCassandra().getHost())
                     .keyspace("testing")
+                    .createKeyspace()
                     .replicationFactor(1)
                     .maxRetry(1)
                     .minDelay(100)
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraAuthenticationExtension.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraAuthenticationExtension.java
index 8351bce..35daa6a 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraAuthenticationExtension.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraAuthenticationExtension.java
@@ -64,6 +64,7 @@ public class CassandraAuthenticationExtension implements 
GuiceModuleTestExtensio
                 .toInstance(configurationBuilder
                     .host(authenticatedCassandra.getHost())
                     .keyspace("testing")
+                    .createKeyspace()
                     .username("cassandra")
                     .replicationFactor(1)
                     .build()),
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
index 9edf24c..396ddab 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
@@ -128,6 +128,7 @@ class CassandraNodeConfTest {
         return ClusterConfiguration.builder()
             .hosts(hosts)
             .keyspace("apache_james")
+            .createKeyspace()
             .replicationFactor(1)
             .maxRetry(10)
             .minDelay(5000)
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
index 98a4fa5..542eef3 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
@@ -49,6 +49,7 @@ public class DockerCassandraRule implements 
GuiceModuleTestRule {
             .toInstance(ClusterConfiguration.builder()
                 .host(cassandraContainer.getHost())
                 .keyspace("testing")
+                .createKeyspace()
                 .replicationFactor(1)
                 .maxRetry(20)
                 .minDelay(5000)


---------------------------------------------------------------------
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