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