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

Reply via email to