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 9850fabd0036838ac9d75691b9cd7ca9fbfdd58e Author: Rene Cordier <rcord...@linagora.com> AuthorDate: Mon Apr 20 11:56:15 2020 +0700 JAMES-3138 Move resetQuotas to CurrentQuotaManager to allow StoreCurrentQuotaManager removal --- .../james/mailbox/quota/CurrentQuotaManager.java | 3 ++ .../quota/CassandraCurrentQuotaManager.java | 16 +++++++-- .../CassandraMessageIdManagerQuotaTest.java | 5 ++- .../CassandraMessageIdManagerTestSystem.java | 3 +- .../cassandra/CassandraTestSystemFixture.java | 4 +-- ...CassandraRecomputeCurrentQuotasServiceTest.java | 3 +- .../quota/CassandraCurrentQuotaManagerTest.java | 8 ++--- .../mailbox/jpa/quota/JpaCurrentQuotaManager.java | 4 +-- .../task/JPARecomputeCurrentQuotasServiceTest.java | 11 +++--- .../jpa/quota/JPACurrentQuotaManagerTest.java | 8 ++--- .../quota/InMemoryCurrentQuotaManager.java | 16 +++++++-- .../mail/task/RecomputeCurrentQuotasService.java | 8 ++--- .../store/quota/ListeningCurrentQuotaUpdater.java | 5 +-- .../store/quota/StoreCurrentQuotaManager.java | 39 ---------------------- .../store/AbstractMessageIdManagerQuotaTest.java | 7 ++-- ...nagerTest.java => CurrentQuotaManagerTest.java} | 17 +++++----- .../quota/ListeningCurrentQuotaUpdaterTest.java | 5 +-- .../modules/mailbox/CassandraQuotaModule.java | 2 -- .../james/modules/mailbox/JpaQuotaModule.java | 2 -- .../james/modules/mailbox/MemoryQuotaModule.java | 2 -- 20 files changed, 76 insertions(+), 92 deletions(-) diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/quota/CurrentQuotaManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/CurrentQuotaManager.java index f99df4b..8b0164e 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/quota/CurrentQuotaManager.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/CurrentQuotaManager.java @@ -40,4 +40,7 @@ public interface CurrentQuotaManager { Publisher<Void> increase(QuotaOperation quotaOperation); Publisher<Void> decrease(QuotaOperation quotaOperation); + + Publisher<Void> resetCurrentQuotas(QuotaOperation quotaOperation); + } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java index 624d003..fdb0e85 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java @@ -39,14 +39,14 @@ import org.apache.james.mailbox.cassandra.table.CassandraCurrentQuota; import org.apache.james.mailbox.model.CurrentQuotas; import org.apache.james.mailbox.model.QuotaOperation; import org.apache.james.mailbox.model.QuotaRoot; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; +import org.apache.james.mailbox.quota.CurrentQuotaManager; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Session; import reactor.core.publisher.Mono; -public class CassandraCurrentQuotaManager implements StoreCurrentQuotaManager { +public class CassandraCurrentQuotaManager implements CurrentQuotaManager { private final CassandraAsyncExecutor cassandraAsyncExecutor; private final PreparedStatement increaseStatement; @@ -113,4 +113,16 @@ public class CassandraCurrentQuotaManager implements StoreCurrentQuotaManager { QuotaSizeUsage.size(row.getLong(STORAGE)))) .defaultIfEmpty(CurrentQuotas.emptyQuotas()); } + + @Override + public Mono<Void> resetCurrentQuotas(QuotaOperation quotaOperation) { + return Mono.from(getCurrentQuotas(quotaOperation.quotaRoot())) + .flatMap(storedQuotas -> { + if (!storedQuotas.equals(CurrentQuotas.from(quotaOperation))) { + return Mono.from(decrease(new QuotaOperation(quotaOperation.quotaRoot(), storedQuotas.count(), storedQuotas.size()))) + .then(Mono.from(increase(quotaOperation))); + } + return Mono.empty(); + }); + } } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java index 675232f..2293ade 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java @@ -26,7 +26,6 @@ import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.store.AbstractMessageIdManagerQuotaTest; import org.apache.james.mailbox.store.MessageIdManagerTestSystem; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import org.junit.jupiter.api.extension.RegisterExtension; @@ -46,12 +45,12 @@ class CassandraMessageIdManagerQuotaTest extends AbstractMessageIdManagerQuotaTe } @Override - protected QuotaManager createQuotaManager(MaxQuotaManager maxQuotaManager, StoreCurrentQuotaManager currentQuotaManager) { + protected QuotaManager createQuotaManager(MaxQuotaManager maxQuotaManager, CurrentQuotaManager currentQuotaManager) { return new StoreQuotaManager(currentQuotaManager, maxQuotaManager); } @Override - protected StoreCurrentQuotaManager createCurrentQuotaManager() { + protected CurrentQuotaManager createCurrentQuotaManager() { return CassandraTestSystemFixture.createCurrentQuotaManager(cassandraCluster.getCassandraCluster()); } } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java index 0ea0093..ee64a24 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java @@ -30,7 +30,6 @@ import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.store.MessageIdManagerTestSystem; import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.metrics.tests.RecordingMetricFactory; class CassandraMessageIdManagerTestSystem { @@ -51,7 +50,7 @@ class CassandraMessageIdManagerTestSystem { CassandraMailboxManager mailboxManager = CassandraTestSystemFixture.createMailboxManager(mapperFactory); ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater( - (StoreCurrentQuotaManager) currentQuotaManager, + currentQuotaManager, mailboxManager.getQuotaComponents().getQuotaRootResolver(), mailboxManager.getEventBus(), quotaManager); mailboxManager.getEventBus().register(listeningCurrentQuotaUpdater); return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventBus(), diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java index 346d6cb..d87463f 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java @@ -36,6 +36,7 @@ import org.apache.james.mailbox.events.EventBusTestFixture; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.MemoryEventDeadLetters; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; +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.store.Authenticator; @@ -52,7 +53,6 @@ import org.apache.james.mailbox.store.extractor.DefaultTextExtractor; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.QuotaComponents; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.search.MessageSearchIndex; import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex; import org.apache.james.metrics.tests.RecordingMetricFactory; @@ -104,7 +104,7 @@ public class CassandraTestSystemFixture { new CassandraGlobalMaxQuotaDao(cassandra.getConf())); } - public static StoreCurrentQuotaManager createCurrentQuotaManager(CassandraCluster cassandra) { + public static CurrentQuotaManager createCurrentQuotaManager(CassandraCluster cassandra) { return new CassandraCurrentQuotaManager(cassandra.getConf()); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/CassandraRecomputeCurrentQuotasServiceTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/CassandraRecomputeCurrentQuotasServiceTest.java index 93d019c..865a651 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/CassandraRecomputeCurrentQuotasServiceTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/CassandraRecomputeCurrentQuotasServiceTest.java @@ -41,7 +41,6 @@ import org.apache.james.mailbox.store.mail.task.RecomputeCurrentQuotasService; import org.apache.james.mailbox.store.mail.task.RecomputeCurrentQuotasServiceContract; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.sieve.cassandra.CassandraSieveRepositoryModule; import org.apache.james.task.Task; import org.apache.james.user.api.UsersRepository; @@ -67,7 +66,7 @@ public class CassandraRecomputeCurrentQuotasServiceTest implements RecomputeCurr UsersRepositoryImpl usersRepository; StoreMailboxManager mailboxManager; SessionProvider sessionProvider; - StoreCurrentQuotaManager currentQuotaManager; + CurrentQuotaManager currentQuotaManager; UserQuotaRootResolver userQuotaRootResolver; RecomputeCurrentQuotasService testee; diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java index 540b428..60e3db3 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java @@ -21,17 +21,17 @@ package org.apache.james.mailbox.cassandra.quota; import org.apache.james.backends.cassandra.CassandraClusterExtension; import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManagerTest; +import org.apache.james.mailbox.quota.CurrentQuotaManager; +import org.apache.james.mailbox.store.quota.CurrentQuotaManagerTest; import org.junit.jupiter.api.extension.RegisterExtension; -class CassandraCurrentQuotaManagerTest extends StoreCurrentQuotaManagerTest { +class CassandraCurrentQuotaManagerTest extends CurrentQuotaManagerTest { @RegisterExtension static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(CassandraQuotaModule.MODULE); @Override - protected StoreCurrentQuotaManager provideTestee() { + protected CurrentQuotaManager provideTestee() { return new CassandraCurrentQuotaManager(cassandraCluster.getCassandraCluster().getConf()); } } diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java index d2f57ec..f297078 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java @@ -32,11 +32,11 @@ import org.apache.james.mailbox.jpa.quota.model.JpaCurrentQuota; import org.apache.james.mailbox.model.CurrentQuotas; import org.apache.james.mailbox.model.QuotaOperation; import org.apache.james.mailbox.model.QuotaRoot; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; +import org.apache.james.mailbox.quota.CurrentQuotaManager; import reactor.core.publisher.Mono; -public class JpaCurrentQuotaManager implements StoreCurrentQuotaManager { +public class JpaCurrentQuotaManager implements CurrentQuotaManager { public static final long NO_MESSAGES = 0L; public static final long NO_STORED_BYTES = 0L; diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/task/JPARecomputeCurrentQuotasServiceTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/task/JPARecomputeCurrentQuotasServiceTest.java index 722848c..549341e 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/task/JPARecomputeCurrentQuotasServiceTest.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/task/JPARecomputeCurrentQuotasServiceTest.java @@ -24,6 +24,7 @@ import javax.persistence.EntityManagerFactory; import org.apache.commons.configuration2.BaseHierarchicalConfiguration; import org.apache.james.backends.jpa.JpaTestCluster; import org.apache.james.domainlist.api.DomainList; +import org.apache.james.domainlist.jpa.model.JPADomain; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.SessionProvider; import org.apache.james.mailbox.jpa.JPAMailboxFixture; @@ -39,16 +40,14 @@ import org.apache.james.mailbox.store.mail.task.RecomputeCurrentQuotasService; import org.apache.james.mailbox.store.mail.task.RecomputeCurrentQuotasServiceContract; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.jpa.JPAUsersRepository; +import org.apache.james.user.jpa.model.JPAUser; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import com.google.common.collect.ImmutableList; -@Disabled("JAMES-3138 Broken...") class JPARecomputeCurrentQuotasServiceTest implements RecomputeCurrentQuotasServiceContract { static final DomainList NO_DOMAIN_LIST = null; @@ -56,12 +55,14 @@ class JPARecomputeCurrentQuotasServiceTest implements RecomputeCurrentQuotasServ static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(ImmutableList.<Class<?>>builder() .addAll(JPAMailboxFixture.MAILBOX_PERSISTANCE_CLASSES) .addAll(JPAMailboxFixture.QUOTA_PERSISTANCE_CLASSES) + .add(JPAUser.class) + .add(JPADomain.class) .build()); JPAUsersRepository usersRepository; StoreMailboxManager mailboxManager; SessionProvider sessionProvider; - StoreCurrentQuotaManager currentQuotaManager; + CurrentQuotaManager currentQuotaManager; UserQuotaRootResolver userQuotaRootResolver; RecomputeCurrentQuotasService testee; @@ -94,6 +95,8 @@ class JPARecomputeCurrentQuotasServiceTest implements RecomputeCurrentQuotasServ JPA_TEST_CLUSTER.clear(ImmutableList.<String>builder() .addAll(JPAMailboxFixture.MAILBOX_TABLE_NAMES) .addAll(JPAMailboxFixture.QUOTA_TABLES_NAMES) + .add("JAMES_USER") + .add("JAMES_DOMAIN") .build()); } diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPACurrentQuotaManagerTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPACurrentQuotaManagerTest.java index dbcebc1..c347113 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPACurrentQuotaManagerTest.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPACurrentQuotaManagerTest.java @@ -21,16 +21,16 @@ package org.apache.james.mailbox.jpa.quota; import org.apache.james.backends.jpa.JpaTestCluster; import org.apache.james.mailbox.jpa.JPAMailboxFixture; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManagerTest; +import org.apache.james.mailbox.quota.CurrentQuotaManager; +import org.apache.james.mailbox.store.quota.CurrentQuotaManagerTest; import org.junit.jupiter.api.AfterEach; -class JPACurrentQuotaManagerTest extends StoreCurrentQuotaManagerTest { +class JPACurrentQuotaManagerTest extends CurrentQuotaManagerTest { static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAMailboxFixture.QUOTA_PERSISTANCE_CLASSES); @Override - protected StoreCurrentQuotaManager provideTestee() { + protected CurrentQuotaManager provideTestee() { return new JpaCurrentQuotaManager(JPA_TEST_CLUSTER.getEntityManagerFactory()); } diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java index 32b55cc..45c14cb 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java @@ -32,8 +32,8 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.CurrentQuotas; import org.apache.james.mailbox.model.QuotaOperation; import org.apache.james.mailbox.model.QuotaRoot; +import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; @@ -41,7 +41,7 @@ import com.google.common.cache.LoadingCache; import reactor.core.publisher.Mono; -public class InMemoryCurrentQuotaManager implements StoreCurrentQuotaManager { +public class InMemoryCurrentQuotaManager implements CurrentQuotaManager { private final LoadingCache<QuotaRoot, AtomicReference<CurrentQuotas>> quotaCache; @@ -83,6 +83,18 @@ public class InMemoryCurrentQuotaManager implements StoreCurrentQuotaManager { .onErrorMap(this::wrapAsMailboxException); } + @Override + public Mono<Void> resetCurrentQuotas(QuotaOperation quotaOperation) { + return Mono.from(getCurrentQuotas(quotaOperation.quotaRoot())) + .flatMap(storedQuotas -> { + if (!storedQuotas.equals(CurrentQuotas.from(quotaOperation))) { + return Mono.from(decrease(new QuotaOperation(quotaOperation.quotaRoot(), storedQuotas.count(), storedQuotas.size()))) + .then(Mono.from(increase(quotaOperation))); + } + return Mono.empty(); + }); + } + private Mono<Void> updateQuota(QuotaRoot quotaRoot, UnaryOperator<CurrentQuotas> quotaFunction) { return Mono.fromCallable(() -> quotaCache.get(quotaRoot).updateAndGet(quotaFunction)) .onErrorMap(this::wrapAsMailboxException) diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/task/RecomputeCurrentQuotasService.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/task/RecomputeCurrentQuotasService.java index e6ae74e..06931c9 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/task/RecomputeCurrentQuotasService.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/task/RecomputeCurrentQuotasService.java @@ -31,9 +31,9 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.SessionProvider; import org.apache.james.mailbox.model.QuotaOperation; import org.apache.james.mailbox.model.QuotaRoot; +import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.UserQuotaRootResolver; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.task.Task; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; @@ -120,14 +120,14 @@ public class RecomputeCurrentQuotasService { } private final UsersRepository usersRepository; - private final StoreCurrentQuotaManager storeCurrentQuotaManager; + private final CurrentQuotaManager storeCurrentQuotaManager; private final CurrentQuotaCalculator currentQuotaCalculator; private final UserQuotaRootResolver userQuotaRootResolver; private final SessionProvider sessionProvider; @Inject public RecomputeCurrentQuotasService(UsersRepository usersRepository, - StoreCurrentQuotaManager storeCurrentQuotaManager, + CurrentQuotaManager storeCurrentQuotaManager, CurrentQuotaCalculator currentQuotaCalculator, UserQuotaRootResolver userQuotaRootResolver, SessionProvider sessionProvider) { @@ -155,7 +155,7 @@ public class RecomputeCurrentQuotasService { return Mono.fromCallable(() -> currentQuotaCalculator.recalculateCurrentQuotas(quotaRoot, session)) .map(recalculatedQuotas -> QuotaOperation.from(quotaRoot, recalculatedQuotas)) - .flatMap(storeCurrentQuotaManager::resetCurrentQuotas) + .flatMap(quotaOperation -> Mono.from(storeCurrentQuotaManager.resetCurrentQuotas(quotaOperation))) .then(Mono.just(Task.Result.COMPLETED)) .doOnNext(any -> { LOGGER.info("Current quotas recomputed for {}", quotaRoot); diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java index 6223e0d..ac76eb6 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java @@ -33,6 +33,7 @@ import org.apache.james.mailbox.events.RegistrationKey; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.QuotaOperation; import org.apache.james.mailbox.model.QuotaRoot; +import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.event.EventFactory; @@ -50,13 +51,13 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo public static final Group GROUP = new ListeningCurrentQuotaUpdaterGroup(); private static final ImmutableSet<RegistrationKey> NO_REGISTRATION_KEYS = ImmutableSet.of(); - private final StoreCurrentQuotaManager currentQuotaManager; + private final CurrentQuotaManager currentQuotaManager; private final QuotaRootResolver quotaRootResolver; private final EventBus eventBus; private final QuotaManager quotaManager; @Inject - public ListeningCurrentQuotaUpdater(StoreCurrentQuotaManager currentQuotaManager, QuotaRootResolver quotaRootResolver, EventBus eventBus, QuotaManager quotaManager) { + public ListeningCurrentQuotaUpdater(CurrentQuotaManager currentQuotaManager, QuotaRootResolver quotaRootResolver, EventBus eventBus, QuotaManager quotaManager) { this.currentQuotaManager = currentQuotaManager; this.quotaRootResolver = quotaRootResolver; this.eventBus = eventBus; diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java deleted file mode 100644 index a60c729..0000000 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.store.quota; - -import org.apache.james.mailbox.model.CurrentQuotas; -import org.apache.james.mailbox.model.QuotaOperation; -import org.apache.james.mailbox.quota.CurrentQuotaManager; - -import reactor.core.publisher.Mono; - -public interface StoreCurrentQuotaManager extends CurrentQuotaManager { - default Mono<Void> resetCurrentQuotas(QuotaOperation quotaOperation) { - return Mono.from(getCurrentQuotas(quotaOperation.quotaRoot())) - .flatMap(storedQuotas -> { - if (!storedQuotas.equals(CurrentQuotas.from(quotaOperation))) { - return Mono.from(decrease(new QuotaOperation(quotaOperation.quotaRoot(), storedQuotas.count(), storedQuotas.size()))) - .then(Mono.from(increase(quotaOperation))); - } - return Mono.empty(); - }); - } -} diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerQuotaTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerQuotaTest.java index 34c4efb..8624426 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerQuotaTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerQuotaTest.java @@ -37,7 +37,6 @@ import org.apache.james.mailbox.model.MessageId; 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.store.quota.StoreCurrentQuotaManager; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -60,14 +59,14 @@ public abstract class AbstractMessageIdManagerQuotaTest { protected abstract MaxQuotaManager createMaxQuotaManager(); - protected abstract StoreCurrentQuotaManager createCurrentQuotaManager(); + protected abstract CurrentQuotaManager createCurrentQuotaManager(); - protected abstract QuotaManager createQuotaManager(MaxQuotaManager maxQuotaManager, StoreCurrentQuotaManager currentQuotaManager); + protected abstract QuotaManager createQuotaManager(MaxQuotaManager maxQuotaManager, CurrentQuotaManager currentQuotaManager); @BeforeEach void setUp() throws Exception { maxQuotaManager = createMaxQuotaManager(); - StoreCurrentQuotaManager currentQuotaManager = createCurrentQuotaManager(); + CurrentQuotaManager currentQuotaManager = createCurrentQuotaManager(); QuotaManager quotaManager = createQuotaManager(maxQuotaManager, currentQuotaManager); session = MailboxSessionUtil.create(ALICE); diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/CurrentQuotaManagerTest.java similarity index 91% rename from mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManagerTest.java rename to mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/CurrentQuotaManagerTest.java index 0a673a2..b4dcf62 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManagerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/CurrentQuotaManagerTest.java @@ -28,6 +28,7 @@ import org.apache.james.core.quota.QuotaSizeUsage; import org.apache.james.mailbox.model.CurrentQuotas; import org.apache.james.mailbox.model.QuotaOperation; import org.apache.james.mailbox.model.QuotaRoot; +import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.assertj.core.api.SoftAssertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -36,14 +37,14 @@ import com.github.fge.lambdas.Throwing; import reactor.core.publisher.Mono; -public abstract class StoreCurrentQuotaManagerTest { +public abstract class CurrentQuotaManagerTest { private static final QuotaRoot QUOTA_ROOT = QuotaRoot.quotaRoot("benwa", Optional.empty()); private static final CurrentQuotas CURRENT_QUOTAS = new CurrentQuotas(QuotaCountUsage.count(10), QuotaSizeUsage.size(100)); private static final QuotaOperation RESET_QUOTA_OPERATION = new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(10), QuotaSizeUsage.size(100)); - protected abstract StoreCurrentQuotaManager provideTestee(); + protected abstract CurrentQuotaManager provideTestee(); - private StoreCurrentQuotaManager testee; + private CurrentQuotaManager testee; @BeforeEach void setUp() { @@ -105,7 +106,7 @@ public abstract class StoreCurrentQuotaManagerTest { void resetCurrentQuotasShouldNoopWhenZeroAndNoData() { QuotaOperation quotaOperation = new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(0), QuotaSizeUsage.size(0)); - testee.resetCurrentQuotas(quotaOperation).block(); + Mono.from(testee.resetCurrentQuotas(quotaOperation)).block(); assertThat(Mono.from(testee.getCurrentQuotas(QUOTA_ROOT)).block()) .isEqualTo(CurrentQuotas.emptyQuotas()); @@ -113,7 +114,7 @@ public abstract class StoreCurrentQuotaManagerTest { @Test void resetCurrentQuotasShouldReInitQuotasWhenNothing() { - testee.resetCurrentQuotas(RESET_QUOTA_OPERATION).block(); + Mono.from(testee.resetCurrentQuotas(RESET_QUOTA_OPERATION)).block(); assertThat(Mono.from(testee.getCurrentQuotas(QUOTA_ROOT)).block()) .isEqualTo(CURRENT_QUOTAS); @@ -123,7 +124,7 @@ public abstract class StoreCurrentQuotaManagerTest { void resetCurrentQuotasShouldReInitQuotasWhenData() { Mono.from(testee.increase(new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(20), QuotaSizeUsage.size(200)))).block(); - testee.resetCurrentQuotas(RESET_QUOTA_OPERATION).block(); + Mono.from(testee.resetCurrentQuotas(RESET_QUOTA_OPERATION)).block(); assertThat(Mono.from(testee.getCurrentQuotas(QUOTA_ROOT)).block()) .isEqualTo(CURRENT_QUOTAS); @@ -133,8 +134,8 @@ public abstract class StoreCurrentQuotaManagerTest { void resetCurrentQuotasShouldBeIdempotent() { Mono.from(testee.increase(new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(20), QuotaSizeUsage.size(200)))).block(); - testee.resetCurrentQuotas(RESET_QUOTA_OPERATION).block(); - testee.resetCurrentQuotas(RESET_QUOTA_OPERATION).block(); + Mono.from(testee.resetCurrentQuotas(RESET_QUOTA_OPERATION)).block(); + Mono.from(testee.resetCurrentQuotas(RESET_QUOTA_OPERATION)).block(); assertThat(Mono.from(testee.getCurrentQuotas(QUOTA_ROOT)).block()) .isEqualTo(CURRENT_QUOTAS); diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java index a43ad52..d775052 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java @@ -48,6 +48,7 @@ import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.QuotaOperation; import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.model.TestId; +import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; @@ -67,14 +68,14 @@ class ListeningCurrentQuotaUpdaterTest { static final QuotaRoot QUOTA_ROOT = QuotaRoot.quotaRoot(BENWA, Optional.empty()); static final QuotaOperation QUOTA = new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(2), QuotaSizeUsage.size(2 * SIZE)); - StoreCurrentQuotaManager mockedCurrentQuotaManager; + CurrentQuotaManager mockedCurrentQuotaManager; QuotaRootResolver mockedQuotaRootResolver; ListeningCurrentQuotaUpdater testee; @BeforeEach void setUp() { mockedQuotaRootResolver = mock(QuotaRootResolver.class); - mockedCurrentQuotaManager = mock(StoreCurrentQuotaManager.class); + mockedCurrentQuotaManager = mock(CurrentQuotaManager.class); EventBus eventBus = mock(EventBus.class); when(eventBus.dispatch(any(Event.class), anySet())).thenReturn(Mono.empty()); testee = new ListeningCurrentQuotaUpdater(mockedCurrentQuotaManager, mockedQuotaRootResolver, diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java index f0101d3..61e7f8f 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java @@ -35,7 +35,6 @@ import org.apache.james.mailbox.quota.UserQuotaRootResolver; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.QuotaUpdater; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import com.google.inject.AbstractModule; @@ -59,7 +58,6 @@ public class CassandraQuotaModule extends AbstractModule { bind(QuotaManager.class).to(StoreQuotaManager.class); bind(QuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); bind(QuotaRootDeserializer.class).to(DefaultUserQuotaRootResolver.class); - bind(StoreCurrentQuotaManager.class).to(CassandraCurrentQuotaManager.class); bind(UserQuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class); diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java index d008c3d..c8a4c31 100644 --- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java +++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java @@ -31,7 +31,6 @@ import org.apache.james.mailbox.quota.UserQuotaRootResolver; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.QuotaUpdater; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import com.google.inject.AbstractModule; @@ -53,7 +52,6 @@ public class JpaQuotaModule extends AbstractModule { bind(MaxQuotaManager.class).to(JPAPerUserMaxQuotaManager.class); bind(QuotaManager.class).to(StoreQuotaManager.class); bind(CurrentQuotaManager.class).to(JpaCurrentQuotaManager.class); - bind(StoreCurrentQuotaManager.class).to(JpaCurrentQuotaManager.class); bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON); bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class); diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java index d16becb..f4e3b33 100644 --- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java +++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java @@ -31,7 +31,6 @@ import org.apache.james.mailbox.quota.UserQuotaRootResolver; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.QuotaUpdater; -import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import com.google.inject.AbstractModule; @@ -53,7 +52,6 @@ public class MemoryQuotaModule extends AbstractModule { bind(MaxQuotaManager.class).to(InMemoryPerUserMaxQuotaManager.class); bind(QuotaManager.class).to(StoreQuotaManager.class); bind(CurrentQuotaManager.class).to(InMemoryCurrentQuotaManager.class); - bind(StoreCurrentQuotaManager.class).to(InMemoryCurrentQuotaManager.class); bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON); bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org