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 a489069a50 [FIX] Prevent dispatching empty flags update (#2572) a489069a50 is described below commit a489069a50a1e6da97b0abaee9e9e320d5abab22 Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Wed Dec 18 12:12:46 2024 +0100 [FIX] Prevent dispatching empty flags update (#2572) --- .../apache/james/mailbox/events/MailboxEvents.java | 2 +- .../apache/james/mailbox/MailboxManagerTest.java | 13 ++++++++++ .../james/mailbox/store/StoreMessageIdManager.java | 29 ++++++++++------------ 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxEvents.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxEvents.java index bafa6d55a8..5ba8f6ca7a 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxEvents.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxEvents.java @@ -512,7 +512,7 @@ public interface MailboxEvents { @Override public boolean isNoop() { - return updatedFlags.isEmpty(); + return updatedFlags.isEmpty() || updatedFlags.stream().noneMatch(UpdatedFlags::flagsChanged); } @Override diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java index bbe3df11e6..422fe64e63 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java @@ -984,6 +984,19 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { .satisfies(event -> assertThat(event.getUids()).hasSize(1)); } + @Test + void setFlagsShouldNotDispatchNoopEvents() throws Exception { + inboxManager.appendMessage(MessageManager.AppendCommand.builder() + .withFlags(new Flags(Flags.Flag.SEEN)) + .build(message), session); + + Mono.from(retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId))).block(); + inboxManager.setFlags(new Flags(Flags.Flag.SEEN), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session); + + assertThat(listener.getEvents()) + .isEmpty(); + } + @Test void deleteMessageShouldFireExpungedEvent() throws Exception { ComposedMessageId messageId = inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session).getId(); 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 1d52e2a526..31d7e62575 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 @@ -425,22 +425,19 @@ public class StoreMessageIdManager implements MessageIdManager { } private Mono<Void> dispatchFlagsChange(MailboxSession mailboxSession, MailboxId mailboxId, ImmutableList<UpdatedFlags> updatedFlags, List<Mailbox> knownMailboxes) { - if (updatedFlags.stream().anyMatch(UpdatedFlags::flagsChanged)) { - return knownMailboxes.stream() - .filter(knownMailbox -> knownMailbox.getMailboxId().equals(mailboxId)) - .findFirst() - .map(Mono::just) - .orElseGet(() -> mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId)) - .flatMap(mailbox -> - eventBus.dispatch(EventFactory.flagsUpdated() - .randomEventId() - .mailboxSession(mailboxSession) - .mailbox(mailbox) - .updatedFlags(updatedFlags) - .build(), - new MailboxIdRegistrationKey(mailboxId))); - } - return Mono.empty(); + return knownMailboxes.stream() + .filter(knownMailbox -> knownMailbox.getMailboxId().equals(mailboxId)) + .findFirst() + .map(Mono::just) + .orElseGet(() -> mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId)) + .flatMap(mailbox -> + eventBus.dispatch(EventFactory.flagsUpdated() + .randomEventId() + .mailboxSession(mailboxSession) + .mailbox(mailbox) + .updatedFlags(updatedFlags) + .build(), + new MailboxIdRegistrationKey(mailboxId))); } private Mono<Void> validateQuota(MessageMovesWithMailbox messageMoves, MailboxMessage mailboxMessage) { --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org