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
The following commit(s) were added to refs/heads/master by this push:
new 73bcf5947c [FIX] Email/set destroy should fire one event per impacted
mailbox (#2576)
73bcf5947c is described below
commit 73bcf5947c1a47dbb331fbed3c6ffc453f9be02a
Author: Benoit TELLIER <[email protected]>
AuthorDate: Fri Dec 20 22:29:29 2024 +0100
[FIX] Email/set destroy should fire one event per impacted mailbox (#2576)
This limits downstream chatter:
- RabbitMQ / Redis dispatch overhead
---
.../org/apache/james/mailbox/store/StoreMessageIdManager.java | 11 ++++++++---
.../mailbox/store/AbstractMessageIdManagerSideEffectTest.java | 9 +++++----
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
index 31d7e62575..bf69257a9b 100644
---
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
+++
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
@@ -290,21 +290,26 @@ public class StoreMessageIdManager implements
MessageIdManager {
private Mono<Void> delete(MessageIdMapper messageIdMapper,
List<MailboxMessage> messageList, MailboxSession mailboxSession,
Map<MetadataWithMailboxId, MessageMetaData> metadataWithMailbox) {
MailboxMapper mailboxMapper =
mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
+ ImmutableListMultimap<MailboxId, MessageMetaData> actualDeletion =
metadataWithMailbox.entrySet().stream()
+ .collect(ImmutableListMultimap.toImmutableListMultimap(
+ e -> e.getKey().getMailboxId(),
+ Map.Entry::getValue));
+
return messageIdMapper.deleteReactive(
messageList.stream()
.collect(ImmutableListMultimap.toImmutableListMultimap(
Message::getMessageId,
MailboxMessage::getMailboxId)))
.then(
- Flux.fromIterable(metadataWithMailbox.entrySet())
- .flatMap(metadataWithMailboxId ->
mailboxMapper.findMailboxById(metadataWithMailboxId.getKey().getMailboxId())
+ Flux.fromIterable(actualDeletion.asMap().entrySet())
+ .flatMap(metadataWithMailboxId ->
mailboxMapper.findMailboxById(metadataWithMailboxId.getKey())
.flatMap(mailbox ->
eventBus.dispatch(EventFactory.expunged()
.randomEventId()
.mailboxSession(mailboxSession)
.mailbox(mailbox)
.addMetaData(metadataWithMailboxId.getValue())
.build(),
- new
MailboxIdRegistrationKey(metadataWithMailboxId.getKey().getMailboxId()))),
DEFAULT_CONCURRENCY)
+ new
MailboxIdRegistrationKey(metadataWithMailboxId.getKey()))), DEFAULT_CONCURRENCY)
.then());
}
diff --git
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
index 29cc21aa92..16ec78a2f2 100644
---
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
+++
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
@@ -181,12 +181,13 @@ public abstract class
AbstractMessageIdManagerSideEffectTest {
AbstractListAssert<?, List<? extends Expunged>, Expunged,
ObjectAssert<Expunged>> events =
assertThat(eventCollector.getEvents())
.filteredOn(event -> event instanceof Expunged)
- .hasSize(2)
- .extracting(event -> (Expunged) event);
+ .hasSize(1)
+ .extracting(event -> (Expunged) event)
+ .allMatch(event -> event.getExpunged().size() == 2);
events.extracting(MailboxEvent::getMailboxId).containsOnly(mailbox1.getMailboxId(),
mailbox1.getMailboxId());
events.extracting(Expunged::getExpunged)
-
.containsOnly(ImmutableSortedMap.of(simpleMessageMetaData1.getUid(),
simpleMessageMetaData1),
- ImmutableSortedMap.of(simpleMessageMetaData2.getUid(),
simpleMessageMetaData2));
+
.containsOnly(ImmutableSortedMap.of(simpleMessageMetaData1.getUid(),
simpleMessageMetaData1,
+ simpleMessageMetaData2.getUid(), simpleMessageMetaData2));
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]