You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/06/25 04:49:20 UTC

[james-project] 13/18: JAMES-3774 Migrate server/container/guice/cassandra to Cassandra driver 4

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 49fbe03be3cfb513d60325097d5d51c4490e7574
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Jun 8 14:27:09 2022 +0700

    JAMES-3774 Migrate server/container/guice/cassandra to Cassandra driver 4
---
 .../mailbox/CassandraCacheSessionModule.java       | 15 ++++----
 .../modules/mailbox/CassandraMailboxModule.java    |  9 ++---
 .../modules/mailbox/CassandraSessionModule.java    | 44 ++++++++--------------
 .../modules/metrics/CassandraMetricsModule.java    | 11 +++---
 4 files changed, 30 insertions(+), 49 deletions(-)

diff --git a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraCacheSessionModule.java b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraCacheSessionModule.java
index 71796b1557..027d7b5c83 100644
--- a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraCacheSessionModule.java
+++ b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraCacheSessionModule.java
@@ -28,8 +28,7 @@ import org.apache.james.backends.cassandra.init.configuration.ClusterConfigurati
 import org.apache.james.backends.cassandra.init.configuration.InjectionNames;
 import org.apache.james.backends.cassandra.init.configuration.KeyspaceConfiguration;
 
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.Session;
+import com.datastax.oss.driver.api.core.CqlSession;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -56,10 +55,10 @@ public class CassandraCacheSessionModule extends AbstractModule {
     @Singleton
     @Named(InjectionNames.CACHE)
     @Provides
-    Session provideSession(@Named(InjectionNames.CACHE) KeyspaceConfiguration keyspaceConfiguration,
-                           InitializedCacheCluster cluster,
-                           @Named(InjectionNames.CACHE) CassandraModule module) {
-        return new SessionWithInitializedTablesFactory(keyspaceConfiguration, cluster.cluster, module).get();
+    CqlSession provideSession(@Named(InjectionNames.CACHE) KeyspaceConfiguration keyspaceConfiguration,
+                              InitializedCacheCluster cluster,
+                              @Named(InjectionNames.CACHE) CassandraModule module) {
+        return new SessionWithInitializedTablesFactory(cluster.cluster, module).get();
     }
 
     @Named(InjectionNames.CACHE)
@@ -70,10 +69,10 @@ public class CassandraCacheSessionModule extends AbstractModule {
     }
 
     static class InitializedCacheCluster {
-        private final Cluster cluster;
+        private final CqlSession cluster;
 
         @Inject
-        private InitializedCacheCluster(Cluster cluster, ClusterConfiguration clusterConfiguration, KeyspacesConfiguration keyspacesConfiguration) {
+        private InitializedCacheCluster(CqlSession cluster, ClusterConfiguration clusterConfiguration, KeyspacesConfiguration keyspacesConfiguration) {
             this.cluster = cluster;
 
             if (clusterConfiguration.shouldCreateKeyspace()) {
diff --git a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index c12a4b8a38..72397e9793 100644
--- a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -24,7 +24,6 @@ import javax.inject.Singleton;
 
 import org.apache.james.adapter.mailbox.UserRepositoryAuthenticator;
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager;
 import org.apache.james.blob.api.BlobReferenceSource;
 import org.apache.james.events.EventListener;
@@ -118,7 +117,7 @@ import org.apache.james.utils.MailboxManagerDefinition;
 import org.apache.mailbox.tools.indexer.MessageIdReIndexerImpl;
 import org.apache.mailbox.tools.indexer.ReIndexerImpl;
 
-import com.datastax.driver.core.Session;
+import com.datastax.oss.driver.api.core.CqlSession;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -247,13 +246,11 @@ public class CassandraMailboxModule extends AbstractModule {
     CassandraACLMapper aclMapper(CassandraACLMapper.StoreV1 storeV1,
                                  CassandraUserMailboxRightsDAO userMailboxRightsDAO,
                                  CassandraACLDAOV2 cassandraACLDAOV2,
-                                 Session session,
-                                 CassandraConsistenciesConfiguration cassandraConsistenciesConfiguration,
+                                 CqlSession session,
                                  CassandraSchemaVersionManager cassandraSchemaVersionManager) {
         return new CassandraACLMapper(storeV1,
             new CassandraACLMapper.StoreV2(userMailboxRightsDAO, cassandraACLDAOV2,
-                new CassandraEventStore(new EventStoreDao(session, JsonEventSerializer.forModules(ACLModule.ACL_UPDATE).withoutNestedType(),
-                    cassandraConsistenciesConfiguration))),
+                new CassandraEventStore(new EventStoreDao(session, JsonEventSerializer.forModules(ACLModule.ACL_UPDATE).withoutNestedType()))),
             cassandraSchemaVersionManager);
     }
     
diff --git a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index 165ce0551e..e5c4f98b24 100644
--- a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -29,11 +29,9 @@ import org.apache.james.backends.cassandra.init.KeyspaceFactory;
 import org.apache.james.backends.cassandra.init.ResilientClusterProvider;
 import org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory;
 import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
-import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration;
 import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration;
 import org.apache.james.backends.cassandra.init.configuration.KeyspaceConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraHealthCheck;
-import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
@@ -47,8 +45,7 @@ import org.apache.james.utils.PropertiesProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.Session;
+import com.datastax.oss.driver.api.core.CqlSession;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
@@ -68,12 +65,9 @@ public class CassandraSessionModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        bind(CassandraUtils.class).in(Scopes.SINGLETON);
-        bind(Cluster.class).toProvider(ResilientClusterProvider.class);
-
         bind(InitializedCluster.class).in(Scopes.SINGLETON);
 
-        bind(Session.class).toProvider(SessionWithInitializedTablesFactory.class);
+        bind(CqlSession.class).toProvider(SessionWithInitializedTablesFactory.class);
 
         Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
         cassandraDataDefinitions.addBinding().toInstance(CassandraZonedDateTimeModule.MODULE);
@@ -92,10 +86,9 @@ public class CassandraSessionModule extends AbstractModule {
 
     @Singleton
     @Provides
-    SessionWithInitializedTablesFactory provideSessionFactory(KeyspaceConfiguration keyspaceConfiguration,
-                                               InitializedCluster cluster,
-                                               CassandraModule module) {
-        return new SessionWithInitializedTablesFactory(keyspaceConfiguration, cluster.cluster, module);
+    SessionWithInitializedTablesFactory provideSessionFactory(InitializedCluster cluster,
+                                                              CassandraModule module) {
+        return new SessionWithInitializedTablesFactory(cluster.cluster, module);
     }
 
     @Provides
@@ -110,13 +103,13 @@ public class CassandraSessionModule extends AbstractModule {
         try {
             Configuration configuration = propertiesProvider.getConfiguration(BATCHSIZES_FILE_NAME);
             BatchSizes batchSizes = BatchSizes.builder()
-                    .fetchMetadata(configuration.getInt("fetch.metadata", BatchSizes.DEFAULT_BATCH_SIZE))
-                    .fetchHeaders(configuration.getInt("fetch.headers", BatchSizes.DEFAULT_BATCH_SIZE))
-                    .fetchBody(configuration.getInt("fetch.body", BatchSizes.DEFAULT_BATCH_SIZE))
-                    .fetchFull(configuration.getInt("fetch.full", BatchSizes.DEFAULT_BATCH_SIZE))
-                    .copyBatchSize(configuration.getInt("copy", BatchSizes.DEFAULT_BATCH_SIZE))
-                    .moveBatchSize(configuration.getInt("move", BatchSizes.DEFAULT_BATCH_SIZE))
-                    .build();
+                .fetchMetadata(configuration.getInt("fetch.metadata", BatchSizes.DEFAULT_BATCH_SIZE))
+                .fetchHeaders(configuration.getInt("fetch.headers", BatchSizes.DEFAULT_BATCH_SIZE))
+                .fetchBody(configuration.getInt("fetch.body", BatchSizes.DEFAULT_BATCH_SIZE))
+                .fetchFull(configuration.getInt("fetch.full", BatchSizes.DEFAULT_BATCH_SIZE))
+                .copyBatchSize(configuration.getInt("copy", BatchSizes.DEFAULT_BATCH_SIZE))
+                .moveBatchSize(configuration.getInt("move", BatchSizes.DEFAULT_BATCH_SIZE))
+                .build();
             LOGGER.debug("BatchSize configuration: {}", batchSizes);
             return batchSizes;
         } catch (FileNotFoundException | ConfigurationException e) {
@@ -136,13 +129,6 @@ public class CassandraSessionModule extends AbstractModule {
         }
     }
 
-    @VisibleForTesting
-    @Provides
-    @Singleton
-    CassandraConsistenciesConfiguration provideCassandraConsistenciesConfiguration(CassandraConfiguration configuration) {
-        return CassandraConsistenciesConfiguration.fromConfiguration(configuration);
-    }
-
     @Provides
     @Singleton
     ClusterConfiguration provideClusterConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException {
@@ -174,11 +160,11 @@ public class CassandraSessionModule extends AbstractModule {
     }
 
     static class InitializedCluster {
-        private final Cluster cluster;
+        private final CqlSession cluster;
 
         @Inject
-        private InitializedCluster(Cluster cluster, ClusterConfiguration clusterConfiguration, KeyspacesConfiguration keyspacesConfiguration) {
-            this.cluster = cluster;
+        private InitializedCluster(ResilientClusterProvider sessionProvider, ClusterConfiguration clusterConfiguration, KeyspacesConfiguration keyspacesConfiguration) {
+            this.cluster = sessionProvider.get();
 
             if (clusterConfiguration.shouldCreateKeyspace()) {
                 KeyspaceFactory.createKeyspace(keyspacesConfiguration.mainKeyspaceConfiguration(), cluster);
diff --git a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
index f8a35207e5..317dc5a8df 100644
--- a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
+++ b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
@@ -24,7 +24,8 @@ import org.apache.james.utils.InitializationOperation;
 import org.apache.james.utils.InitilizationOperationBuilder;
 
 import com.codahale.metrics.MetricRegistry;
-import com.datastax.driver.core.Session;
+import com.datastax.oss.driver.api.core.CqlSession;
+import com.datastax.oss.driver.api.core.metrics.Metrics;
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.ProvidesIntoSet;
@@ -37,13 +38,11 @@ public class CassandraMetricsModule extends AbstractModule {
     }
 
     @ProvidesIntoSet
-    InitializationOperation injectMetrics(MetricRegistry metricRegistry, Session session) {
+    InitializationOperation injectMetrics(MetricRegistry metricRegistry, CqlSession session) {
         return InitilizationOperationBuilder
             .forClass(CassandraMetricsInjector.class)
-            .init(() -> metricRegistry.registerAll(
-                session.getCluster()
-                    .getMetrics()
-                    .getRegistry()));
+            .init(() -> session.getMetrics().map(Metrics::getRegistry)
+                .ifPresent(metricRegistry::registerAll));
     }
 
     public static class CassandraMetricsInjector implements Startable {


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org