This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch postgresql
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/postgresql by this push:
new f5ca047cfe Provision Current Quota when MailboxAdded event
f5ca047cfe is described below
commit f5ca047cfe6a45c29c98ad77e9e610dd67788e5e
Author: vttran <[email protected]>
AuthorDate: Thu Mar 14 13:33:10 2024 +0700
Provision Current Quota when MailboxAdded event
---
.../store/quota/ListeningCurrentQuotaUpdater.java | 22 ++++++++++++-
.../quota/ListeningCurrentQuotaUpdaterTest.java | 38 ++++++++++++++++++++++
2 files changed, 59 insertions(+), 1 deletion(-)
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 e6b158e34c..99062971bc 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
@@ -30,8 +30,10 @@ import org.apache.james.events.EventBus;
import org.apache.james.events.EventListener;
import org.apache.james.events.Group;
import org.apache.james.events.RegistrationKey;
+import org.apache.james.mailbox.events.MailboxEvents;
import org.apache.james.mailbox.events.MailboxEvents.Added;
import org.apache.james.mailbox.events.MailboxEvents.Expunged;
+import org.apache.james.mailbox.events.MailboxEvents.MailboxAdded;
import org.apache.james.mailbox.events.MailboxEvents.MailboxDeletion;
import org.apache.james.mailbox.events.MailboxEvents.MetaDataHoldingEvent;
import org.apache.james.mailbox.model.QuotaOperation;
@@ -74,7 +76,10 @@ public class ListeningCurrentQuotaUpdater implements
EventListener.ReactiveGroup
@Override
public boolean isHandling(Event event) {
- return event instanceof Added || event instanceof Expunged || event
instanceof MailboxDeletion;
+ return event instanceof Added
+ || event instanceof Expunged
+ || event instanceof MailboxDeletion
+ || event instanceof MailboxAdded;
}
@Override
@@ -90,6 +95,9 @@ public class ListeningCurrentQuotaUpdater implements
EventListener.ReactiveGroup
} else if (event instanceof MailboxDeletion) {
MailboxDeletion mailboxDeletionEvent = (MailboxDeletion) event;
return handleMailboxDeletionEvent(mailboxDeletionEvent);
+ } else if (event instanceof MailboxAdded) {
+ MailboxEvents.MailboxAdded mailboxAdded =
(MailboxEvents.MailboxAdded) event;
+ return handleMailboxAddedEvent(mailboxAdded);
}
return Mono.empty();
}
@@ -149,4 +157,16 @@ public class ListeningCurrentQuotaUpdater implements
EventListener.ReactiveGroup
return Mono.empty();
}
+ private Mono<Void> handleMailboxAddedEvent(MailboxAdded mailboxAdded) {
+ return provisionCurrentQuota(mailboxAdded);
+ }
+
+ private Mono<Void> provisionCurrentQuota(MailboxAdded mailboxAdded) {
+ return
Mono.from(quotaRootResolver.getQuotaRootReactive(mailboxAdded.getMailboxPath()))
+ .flatMap(quotaRoot ->
Mono.from(currentQuotaManager.getCurrentQuotas(quotaRoot))
+ .map(any -> quotaRoot)
+ .switchIfEmpty(Mono.defer(() ->
Mono.from(currentQuotaManager.setCurrentQuotas(new QuotaOperation(quotaRoot,
QuotaCountUsage.count(0), QuotaSizeUsage.ZERO)))
+ .thenReturn(quotaRoot))))
+ .then();
+ }
}
\ No newline at end of file
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 f20a2c22fe..b6b17cfbbe 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
@@ -42,9 +42,11 @@ import org.apache.james.events.EventBus;
import org.apache.james.events.Group;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.ModSeq;
+import org.apache.james.mailbox.events.MailboxEvents;
import org.apache.james.mailbox.events.MailboxEvents.Added;
import org.apache.james.mailbox.events.MailboxEvents.Expunged;
import org.apache.james.mailbox.events.MailboxEvents.MailboxDeletion;
+import org.apache.james.mailbox.model.CurrentQuotas;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageMetaData;
@@ -194,4 +196,40 @@ class ListeningCurrentQuotaUpdaterTest {
verifyNoMoreInteractions(mockedCurrentQuotaManager);
}
+
+ @Test
+ void mailboxAddEventShouldProvisionCurrentQuota() throws Exception {
+ QuotaOperation operation = new QuotaOperation(QUOTA_ROOT,
QuotaCountUsage.count(0), QuotaSizeUsage.size(0));
+
+ MailboxEvents.MailboxAdded added;
+ added = mock(MailboxEvents.MailboxAdded.class);
+
+ when(added.getMailboxId()).thenReturn(MAILBOX_ID);
+ when(added.getMailboxPath()).thenReturn(MAILBOX_PATH);
+ when(added.getUsername()).thenReturn(USERNAME_BENWA);
+ when(mockedQuotaRootResolver.getQuotaRootReactive(eq(MAILBOX_PATH)))
+ .thenReturn(Mono.just(QUOTA_ROOT));
+
when(mockedCurrentQuotaManager.getCurrentQuotas(QUOTA_ROOT)).thenAnswer(any ->
Mono.empty());
+
when(mockedCurrentQuotaManager.setCurrentQuotas(operation)).thenAnswer(any ->
Mono.empty());
+
+ testee.event(added);
+
+ verify(mockedCurrentQuotaManager).setCurrentQuotas(operation);
+ }
+
+ @Test
+ void mailboxAddEventShouldNotProvisionWhenAlreadyExist() throws Exception {
+ MailboxEvents.MailboxAdded added =
mock(MailboxEvents.MailboxAdded.class);
+ when(added.getMailboxId()).thenReturn(MAILBOX_ID);
+ when(added.getMailboxPath()).thenReturn(MAILBOX_PATH);
+ when(added.getUsername()).thenReturn(USERNAME_BENWA);
+ when(mockedQuotaRootResolver.getQuotaRootReactive(eq(MAILBOX_PATH)))
+ .thenReturn(Mono.just(QUOTA_ROOT));
+ when(mockedCurrentQuotaManager.getCurrentQuotas(QUOTA_ROOT))
+ .thenAnswer(any -> Mono.just(CurrentQuotas.from(QUOTA)));
+
+ testee.event(added);
+
+ verify(mockedCurrentQuotaManager, never()).setCurrentQuotas(any());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]