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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]