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 <btell...@linagora.com> 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: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org