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

Reply via email to