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

rcordier pushed a commit to branch james-3926-mailbox-current-quotas
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c6fb69ad1810484fd036f915abc5a5545c2c25a4
Author: Rene Cordier <rcord...@linagora.com>
AuthorDate: Mon Aug 28 16:48:37 2023 +0700

    JAMES-3926 Module choosing for Mailbox Quota
---
 ...odule.java => CassandraMailboxQuotaModule.java} | 33 +-------------------
 .../cassandra/modules/CassandraQuotaModule.java    | 11 -------
 .../cassandra/mail/MailboxAggregateModule.java     |  3 +-
 .../quota/CassandraCurrentQuotaManagerV1Test.java  |  2 ++
 .../CassandraCurrentQuotaManagerMigrationTest.java |  2 ++
 .../org/apache/james/CassandraJamesServerMain.java | 11 +++++++
 .../james/CassandraLegacyQuotaJamesServerTest.java | 33 ++++++++++----------
 .../james/CassandraRabbitMQJamesServerMain.java    | 11 +++++++
 ...assandraRabbitMQLegacyQuotaJamesServerTest.java | 35 ++++++++++++----------
 .../james/DistributedPOP3JamesServerMain.java      | 11 +++++++
 .../mailbox/CassandraMailboxQuotaLegacyModule.java | 27 +++++++++--------
 .../mailbox/CassandraMailboxQuotaModule.java       | 25 +++++++---------
 .../modules/mailbox/CassandraQuotaModule.java      |  5 ----
 .../upload/CassandraUploadUsageRepositoryTest.java |  4 ++-
 14 files changed, 104 insertions(+), 109 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxQuotaModule.java
similarity index 54%
copy from 
mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
copy to 
mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxQuotaModule.java
index 196ce14cbb..da6dcee591 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxQuotaModule.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.mailbox.cassandra.modules;
 
-import static com.datastax.oss.driver.api.core.type.DataTypes.BIGINT;
 import static com.datastax.oss.driver.api.core.type.DataTypes.COUNTER;
 import static com.datastax.oss.driver.api.core.type.DataTypes.TEXT;
 import static 
com.datastax.oss.driver.api.querybuilder.SchemaBuilder.RowsPerPartition.rows;
@@ -27,11 +26,8 @@ import static 
com.datastax.oss.driver.api.querybuilder.SchemaBuilder.RowsPerPart
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.utils.CassandraConstants;
 import org.apache.james.mailbox.cassandra.table.CassandraCurrentQuota;
-import org.apache.james.mailbox.cassandra.table.CassandraDomainMaxQuota;
-import org.apache.james.mailbox.cassandra.table.CassandraGlobalMaxQuota;
-import org.apache.james.mailbox.cassandra.table.CassandraMaxQuota;
 
-public interface CassandraQuotaModule {
+public interface CassandraMailboxQuotaModule {
     CassandraModule MODULE = CassandraModule.builder()
         .table(CassandraCurrentQuota.TABLE_NAME)
         .comment("Holds per quota-root current values. Quota-roots defines 
groups of mailboxes which shares quotas limitations.")
@@ -42,32 +38,5 @@ public interface CassandraQuotaModule {
             .withColumn(CassandraCurrentQuota.MESSAGE_COUNT, COUNTER)
             .withColumn(CassandraCurrentQuota.STORAGE, COUNTER))
 
-        .table(CassandraMaxQuota.TABLE_NAME)
-        .comment("Holds per quota-root limitations. Limitations can concern 
the number of messages in a quota-root or the total size of a quota-root.")
-        .options(options -> options
-            .withCaching(true, 
rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .statement(statement -> types -> statement
-            .withPartitionKey(CassandraMaxQuota.QUOTA_ROOT, TEXT)
-            .withColumn(CassandraMaxQuota.MESSAGE_COUNT, BIGINT)
-            .withColumn(CassandraMaxQuota.STORAGE, BIGINT))
-
-        .table(CassandraDomainMaxQuota.TABLE_NAME)
-        .comment("Holds per domain limitations. Limitations can concern the 
number of messages in a quota-root or the total size of a quota-root.")
-        .options(options -> options
-            .withCaching(true, 
rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .statement(statement -> types -> statement
-            .withPartitionKey(CassandraDomainMaxQuota.DOMAIN, TEXT)
-            .withColumn(CassandraDomainMaxQuota.MESSAGE_COUNT, BIGINT)
-            .withColumn(CassandraDomainMaxQuota.STORAGE, BIGINT))
-
-        .table(CassandraGlobalMaxQuota.TABLE_NAME)
-        .comment("Holds defaults limitations definition.")
-        .options(options -> options
-            .withCaching(true, 
rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .statement(statement -> types -> statement
-            .withPartitionKey(CassandraGlobalMaxQuota.KEY, TEXT)
-            .withColumn(CassandraGlobalMaxQuota.STORAGE, BIGINT)
-            .withColumn(CassandraGlobalMaxQuota.MESSAGE, BIGINT))
-
         .build();
 }
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
index 196ce14cbb..9a9f4c7de4 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
@@ -20,28 +20,17 @@
 package org.apache.james.mailbox.cassandra.modules;
 
 import static com.datastax.oss.driver.api.core.type.DataTypes.BIGINT;
-import static com.datastax.oss.driver.api.core.type.DataTypes.COUNTER;
 import static com.datastax.oss.driver.api.core.type.DataTypes.TEXT;
 import static 
com.datastax.oss.driver.api.querybuilder.SchemaBuilder.RowsPerPartition.rows;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.utils.CassandraConstants;
-import org.apache.james.mailbox.cassandra.table.CassandraCurrentQuota;
 import org.apache.james.mailbox.cassandra.table.CassandraDomainMaxQuota;
 import org.apache.james.mailbox.cassandra.table.CassandraGlobalMaxQuota;
 import org.apache.james.mailbox.cassandra.table.CassandraMaxQuota;
 
 public interface CassandraQuotaModule {
     CassandraModule MODULE = CassandraModule.builder()
-        .table(CassandraCurrentQuota.TABLE_NAME)
-        .comment("Holds per quota-root current values. Quota-roots defines 
groups of mailboxes which shares quotas limitations.")
-        .options(options -> options
-            .withCaching(true, 
rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .statement(statement -> types -> statement
-            .withPartitionKey(CassandraCurrentQuota.QUOTA_ROOT, TEXT)
-            .withColumn(CassandraCurrentQuota.MESSAGE_COUNT, COUNTER)
-            .withColumn(CassandraCurrentQuota.STORAGE, COUNTER))
-
         .table(CassandraMaxQuota.TABLE_NAME)
         .comment("Holds per quota-root limitations. Limitations can concern 
the number of messages in a quota-root or the total size of a quota-root.")
         .options(options -> options
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
index dd8c2b7c9d..e4183c7972 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
@@ -32,6 +32,7 @@ import 
org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule;
 import 
org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraMailboxQuotaModule;
 import 
org.apache.james.mailbox.cassandra.modules.CassandraMailboxRecentsModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
@@ -60,5 +61,5 @@ public interface MailboxAggregateModule {
         CassandraUidModule.MODULE,
         CassandraThreadModule.MODULE);
 
-    CassandraModule MODULE_WITH_QUOTA = 
CassandraModule.aggregateModules(CassandraQuotaModule.MODULE, 
CassandraMutualizedQuotaModule.MODULE, MODULE);
+    CassandraModule MODULE_WITH_QUOTA = 
CassandraModule.aggregateModules(CassandraQuotaModule.MODULE, 
CassandraMailboxQuotaModule.MODULE, CassandraMutualizedQuotaModule.MODULE, 
MODULE);
 }
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
index 5908cbdd06..2b3caf1f58 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
@@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra.quota;
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import 
org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraMailboxQuotaModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.store.quota.CurrentQuotaManagerContract;
@@ -31,6 +32,7 @@ class CassandraCurrentQuotaManagerV1Test implements 
CurrentQuotaManagerContract
 
     @RegisterExtension
     static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(CassandraQuotaModule.MODULE,
+        CassandraMailboxQuotaModule.MODULE,
         CassandraMutualizedQuotaModule.MODULE));
 
     @Override
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigrationTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigrationTest.java
index cb33b72735..e898fb3b1f 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigrationTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigrationTest.java
@@ -38,6 +38,7 @@ import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.api.mock.SimpleDomainList;
 import org.apache.james.domainlist.cassandra.CassandraDomainListModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraMailboxQuotaModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManagerV1;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManagerV2;
@@ -61,6 +62,7 @@ public class CassandraCurrentQuotaManagerMigrationTest {
     @RegisterExtension
     static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(
         CassandraQuotaModule.MODULE,
+        CassandraMailboxQuotaModule.MODULE,
         CassandraUsersRepositoryModule.MODULE,
         CassandraDomainListModule.MODULE,
         CassandraMutualizedQuotaModule.MODULE));
diff --git 
a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
 
b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
index c0cf0d93ab..2dc58da132 100644
--- 
a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ 
b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -42,6 +42,8 @@ import 
org.apache.james.modules.mailbox.CassandraBlobStoreDependenciesModule;
 import org.apache.james.modules.mailbox.CassandraBucketModule;
 import org.apache.james.modules.mailbox.CassandraDeletedMessageVaultModule;
 import org.apache.james.modules.mailbox.CassandraMailboxModule;
+import org.apache.james.modules.mailbox.CassandraMailboxQuotaLegacyModule;
+import org.apache.james.modules.mailbox.CassandraMailboxQuotaModule;
 import org.apache.james.modules.mailbox.CassandraQuotaMailingModule;
 import org.apache.james.modules.mailbox.CassandraSessionModule;
 import org.apache.james.modules.mailbox.TikaMailboxModule;
@@ -196,6 +198,7 @@ public class CassandraJamesServerMain implements 
JamesServerMain {
             .combineWith(new UsersRepositoryModuleChooser(new 
CassandraUsersRepositoryModule())
                 
.chooseModules(configuration.getUsersRepositoryImplementation()))
             
.combineWith(chooseDeletedMessageVault(configuration.getVaultConfiguration()))
+            .combineWith(chooseMailboxQuotaModule(configuration))
             .combineWith(chooseJmapModule(configuration));
     }
 
@@ -218,4 +221,12 @@ public class CassandraJamesServerMain implements 
JamesServerMain {
 
         };
     }
+
+    private static Module 
chooseMailboxQuotaModule(CassandraJamesServerConfiguration configuration) {
+        if (configuration.isQuotaCompatibilityMode()) {
+            return new CassandraMailboxQuotaLegacyModule();
+        } else {
+            return new CassandraMailboxQuotaModule();
+        }
+    }
 }
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
 
b/server/apps/cassandra-app/src/test/java/org/apache/james/CassandraLegacyQuotaJamesServerTest.java
similarity index 57%
copy from 
mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
copy to 
server/apps/cassandra-app/src/test/java/org/apache/james/CassandraLegacyQuotaJamesServerTest.java
index 5908cbdd06..bc38057525 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
+++ 
b/server/apps/cassandra-app/src/test/java/org/apache/james/CassandraLegacyQuotaJamesServerTest.java
@@ -17,24 +17,25 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.cassandra.quota;
+package org.apache.james;
 
-import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import 
org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
-import org.apache.james.mailbox.quota.CurrentQuotaManager;
-import org.apache.james.mailbox.store.quota.CurrentQuotaManagerContract;
+import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.modules.TestJMAPServerModule;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-class CassandraCurrentQuotaManagerV1Test implements 
CurrentQuotaManagerContract {
-
+public class CassandraLegacyQuotaJamesServerTest implements 
JamesServerConcreteContract, JmapJamesServerContract {
     @RegisterExtension
-    static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(CassandraQuotaModule.MODULE,
-        CassandraMutualizedQuotaModule.MODULE));
-
-    @Override
-    public CurrentQuotaManager testee() {
-        return new 
CassandraCurrentQuotaManagerV1(cassandraCluster.getCassandraCluster().getConf());
-    }
+    static JamesServerExtension testExtension = new 
JamesServerBuilder<CassandraJamesServerConfiguration>(tmpDir ->
+        CassandraJamesServerConfiguration.builder()
+            .workingDirectory(tmpDir)
+            .configurationFromClasspath()
+            .searchConfiguration(SearchConfiguration.openSearch())
+            .quotaCompatibilityModeEnabled(true)
+            .build())
+        .extension(new DockerOpenSearchExtension())
+        .extension(new CassandraExtension())
+        .server(configuration -> 
CassandraJamesServerMain.createServer(configuration)
+            .overrideWith(new TestJMAPServerModule()))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 }
diff --git 
a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
 
b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
index e94f99be7d..008f040189 100644
--- 
a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
+++ 
b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
@@ -50,6 +50,8 @@ import org.apache.james.modules.event.RabbitMQEventBusModule;
 import org.apache.james.modules.eventstore.CassandraEventStoreModule;
 import org.apache.james.modules.mailbox.CassandraDeletedMessageVaultModule;
 import org.apache.james.modules.mailbox.CassandraMailboxModule;
+import org.apache.james.modules.mailbox.CassandraMailboxQuotaLegacyModule;
+import org.apache.james.modules.mailbox.CassandraMailboxQuotaModule;
 import org.apache.james.modules.mailbox.CassandraQuotaMailingModule;
 import org.apache.james.modules.mailbox.CassandraSessionModule;
 import org.apache.james.modules.mailbox.TikaMailboxModule;
@@ -202,6 +204,7 @@ public class CassandraRabbitMQJamesServerMain implements 
JamesServerMain {
             .combineWith(new UsersRepositoryModuleChooser(new 
CassandraUsersRepositoryModule())
                 
.chooseModules(configuration.getUsersRepositoryImplementation()))
             
.combineWith(chooseDeletedMessageVault(configuration.getVaultConfiguration()))
+            .combineWith(chooseMailboxQuotaModule(configuration))
             .combineWith(chooseJmapModule(configuration));
     }
 
@@ -224,4 +227,12 @@ public class CassandraRabbitMQJamesServerMain implements 
JamesServerMain {
 
         };
     }
+
+    private static Module 
chooseMailboxQuotaModule(CassandraRabbitMQJamesConfiguration configuration) {
+        if (configuration.isQuotaCompatibilityMode()) {
+            return new CassandraMailboxQuotaLegacyModule();
+        } else {
+            return new CassandraMailboxQuotaModule();
+        }
+    }
 }
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
 
b/server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQLegacyQuotaJamesServerTest.java
similarity index 54%
copy from 
mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
copy to 
server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQLegacyQuotaJamesServerTest.java
index 5908cbdd06..6701ec6fd5 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
+++ 
b/server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQLegacyQuotaJamesServerTest.java
@@ -17,24 +17,27 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.cassandra.quota;
+package org.apache.james;
 
-import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import 
org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
-import org.apache.james.mailbox.quota.CurrentQuotaManager;
-import org.apache.james.mailbox.store.quota.CurrentQuotaManagerContract;
+import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.modules.RabbitMQExtension;
+import org.apache.james.modules.TestJMAPServerModule;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-class CassandraCurrentQuotaManagerV1Test implements 
CurrentQuotaManagerContract {
-
+public class CassandraRabbitMQLegacyQuotaJamesServerTest implements 
JamesServerConcreteContract, JmapJamesServerContract {
     @RegisterExtension
-    static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(CassandraQuotaModule.MODULE,
-        CassandraMutualizedQuotaModule.MODULE));
-
-    @Override
-    public CurrentQuotaManager testee() {
-        return new 
CassandraCurrentQuotaManagerV1(cassandraCluster.getCassandraCluster().getConf());
-    }
+    static JamesServerExtension jamesServerExtension = new 
JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
+        CassandraRabbitMQJamesConfiguration.builder()
+            .workingDirectory(tmpDir)
+            .configurationFromClasspath()
+            .searchConfiguration(SearchConfiguration.openSearch())
+            .quotaCompatibilityModeEnabled(true)
+            .build())
+        .server(configuration -> 
CassandraRabbitMQJamesServerMain.createServer(configuration)
+            .overrideWith(new TestJMAPServerModule()))
+        .extension(new DockerOpenSearchExtension())
+        .extension(new CassandraExtension())
+        .extension(new RabbitMQExtension())
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 }
diff --git 
a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
 
b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
index 91ebe766ce..0a15dcfb65 100644
--- 
a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
+++ 
b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
@@ -59,6 +59,8 @@ import 
org.apache.james.modules.eventstore.CassandraEventStoreModule;
 import org.apache.james.modules.mailbox.CassandraBlobStoreDependenciesModule;
 import org.apache.james.modules.mailbox.CassandraDeletedMessageVaultModule;
 import org.apache.james.modules.mailbox.CassandraMailboxModule;
+import org.apache.james.modules.mailbox.CassandraMailboxQuotaLegacyModule;
+import org.apache.james.modules.mailbox.CassandraMailboxQuotaModule;
 import org.apache.james.modules.mailbox.CassandraSessionModule;
 import org.apache.james.modules.mailbox.TikaMailboxModule;
 import org.apache.james.modules.mailrepository.CassandraMailRepositoryModule;
@@ -195,6 +197,7 @@ public class DistributedPOP3JamesServerMain implements 
JamesServerMain {
             
.combineWith(BlobStoreModulesChooser.chooseModules(blobStoreConfiguration))
             
.combineWith(BlobStoreCacheModulesChooser.chooseModules(blobStoreConfiguration))
             
.combineWith(SearchModuleChooser.chooseModules(searchConfiguration))
+            .combineWith(chooseMailboxQuotaModule(configuration))
             .combineWith(new UsersRepositoryModuleChooser(new 
CassandraUsersRepositoryModule())
                 
.chooseModules(configuration.getUsersRepositoryImplementation()))
             .overrideWith(new DistributedPop3Module())
@@ -219,4 +222,12 @@ public class DistributedPOP3JamesServerMain implements 
JamesServerMain {
 
         };
     }
+
+    private static Module 
chooseMailboxQuotaModule(DistributedPOP3JamesConfiguration configuration) {
+        if (configuration.isQuotaCompatibilityMode()) {
+            return new CassandraMailboxQuotaLegacyModule();
+        } else {
+            return new CassandraMailboxQuotaModule();
+        }
+    }
 }
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaLegacyModule.java
similarity index 59%
copy from 
mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
copy to 
server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaLegacyModule.java
index 5908cbdd06..db45571dcd 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
+++ 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaLegacyModule.java
@@ -17,24 +17,25 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.cassandra.quota;
+package org.apache.james.modules.mailbox;
 
-import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import 
org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
+import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManagerV1;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
-import org.apache.james.mailbox.store.quota.CurrentQuotaManagerContract;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
-class CassandraCurrentQuotaManagerV1Test implements 
CurrentQuotaManagerContract {
-
-    @RegisterExtension
-    static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(CassandraQuotaModule.MODULE,
-        CassandraMutualizedQuotaModule.MODULE));
+import com.google.inject.AbstractModule;
+import com.google.inject.Scopes;
+import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Names;
 
+public class CassandraMailboxQuotaLegacyModule extends AbstractModule {
     @Override
-    public CurrentQuotaManager testee() {
-        return new 
CassandraCurrentQuotaManagerV1(cassandraCluster.getCassandraCluster().getConf());
+    protected void configure() {
+        bind(CassandraCurrentQuotaManagerV1.class).in(Scopes.SINGLETON);
+        
bind(CurrentQuotaManager.class).to(CassandraCurrentQuotaManagerV1.class);
+        
bind(CurrentQuotaManager.class).annotatedWith(Names.named("old")).to(CassandraCurrentQuotaManagerV1.class);
+
+        Multibinder<CassandraModule> cassandraDataDefinitions = 
Multibinder.newSetBinder(binder(), CassandraModule.class);
+        
cassandraDataDefinitions.addBinding().toInstance(org.apache.james.mailbox.cassandra.modules.CassandraMailboxQuotaModule.MODULE);
     }
 }
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaModule.java
similarity index 57%
copy from 
mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
copy to 
server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaModule.java
index 5908cbdd06..08ee61dd60 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
+++ 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaModule.java
@@ -17,24 +17,21 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.cassandra.quota;
+package org.apache.james.modules.mailbox;
 
-import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import 
org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
+import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManagerV2;
+import 
org.apache.james.mailbox.cassandra.quota.FakeCassandraCurrentQuotaManager;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
-import org.apache.james.mailbox.store.quota.CurrentQuotaManagerContract;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
-class CassandraCurrentQuotaManagerV1Test implements 
CurrentQuotaManagerContract {
-
-    @RegisterExtension
-    static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(CassandraQuotaModule.MODULE,
-        CassandraMutualizedQuotaModule.MODULE));
+import com.google.inject.AbstractModule;
+import com.google.inject.Scopes;
+import com.google.inject.name.Names;
 
+public class CassandraMailboxQuotaModule extends AbstractModule {
     @Override
-    public CurrentQuotaManager testee() {
-        return new 
CassandraCurrentQuotaManagerV1(cassandraCluster.getCassandraCluster().getConf());
+    protected void configure() {
+        bind(CassandraCurrentQuotaManagerV2.class).in(Scopes.SINGLETON);
+        
bind(CurrentQuotaManager.class).to(CassandraCurrentQuotaManagerV2.class);
+        
bind(CurrentQuotaManager.class).annotatedWith(Names.named("old")).to(FakeCassandraCurrentQuotaManager.class);
     }
 }
diff --git 
a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
index 9100d2b38f..2684ce7bfe 100644
--- 
a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
+++ 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
@@ -24,12 +24,10 @@ import 
org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaMo
 import 
org.apache.james.backends.cassandra.components.CassandraQuotaCurrentValueDao;
 import org.apache.james.backends.cassandra.components.CassandraQuotaLimitDao;
 import org.apache.james.events.EventListener;
-import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManagerV1;
 import org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
-import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootDeserializer;
@@ -45,10 +43,8 @@ import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
 
 public class CassandraQuotaModule extends AbstractModule {
-
     @Override
     protected void configure() {
-        bind(CassandraCurrentQuotaManagerV1.class).in(Scopes.SINGLETON);
         bind(CassandraQuotaLimitDao.class).in(Scopes.SINGLETON);
         bind(CassandraQuotaCurrentValueDao.class).in(Scopes.SINGLETON);
         bind(CassandraGlobalMaxQuotaDao.class).in(Scopes.SINGLETON);
@@ -58,7 +54,6 @@ public class CassandraQuotaModule extends AbstractModule {
         bind(DefaultUserQuotaRootResolver.class).in(Scopes.SINGLETON);
         bind(StoreQuotaManager.class).in(Scopes.SINGLETON);
 
-        
bind(CurrentQuotaManager.class).to(CassandraCurrentQuotaManagerV1.class);
         bind(MaxQuotaManager.class).to(CassandraPerUserMaxQuotaManager.class);
         bind(QuotaManager.class).to(StoreQuotaManager.class);
         bind(QuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class);
diff --git 
a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepositoryTest.java
 
b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepositoryTest.java
index f35ef96d98..1f9c4ba118 100644
--- 
a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepositoryTest.java
+++ 
b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepositoryTest.java
@@ -21,9 +21,11 @@ package org.apache.james.jmap.cassandra.upload;
 
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.backends.cassandra.components.CassandraModule;
+import 
org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaModule;
 import 
org.apache.james.backends.cassandra.components.CassandraQuotaCurrentValueDao;
 import org.apache.james.jmap.api.upload.UploadUsageRepository;
 import org.apache.james.jmap.api.upload.UploadUsageRepositoryContract;
+import org.apache.james.mailbox.cassandra.modules.CassandraMailboxQuotaModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -31,7 +33,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 public class CassandraUploadUsageRepositoryTest implements 
UploadUsageRepositoryContract {
 
     @RegisterExtension
-    static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(CassandraQuotaModule.MODULE));
+    static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(CassandraModule.aggregateModules(CassandraQuotaModule.MODULE,
 CassandraMutualizedQuotaModule.MODULE));
 
     private CassandraUploadUsageRepository cassandraUploadUsageRepository;
 


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

Reply via email to