You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2024/12/18 11:12:52 UTC
(james-project) branch master updated: [FIX] Prevent dispatching empty flags update (#2572)
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org