You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2023/12/04 08:38:08 UTC

(james-project) 03/07: JAMES-2586 - Fixup PostgresMessageMapper updateFlags method - apply single new modSeq for all messages

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch postgresql
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 223c353226e244a8f0b1c62efcc44e86346ee33b
Author: Tung Tran <vt...@linagora.com>
AuthorDate: Thu Nov 30 11:41:49 2023 +0700

    JAMES-2586 - Fixup PostgresMessageMapper updateFlags method - apply single new modSeq for all messages
---
 .../james/mailbox/postgres/mail/PostgresMessageMapper.java   | 12 ++++++++++--
 .../mailbox/postgres/mail/dao/PostgresMailboxMessageDAO.java |  1 +
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMapper.java b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMapper.java
index badeadbf1b..1a6787d5c4 100644
--- a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMapper.java
+++ b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMapper.java
@@ -307,8 +307,16 @@ public class PostgresMessageMapper implements MessageMapper {
 
     private Flux<UpdatedFlags> updateFlagsPublisher(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator, MessageRange range) {
         return mailboxMessageDAO.findMessagesMetadata((PostgresMailboxId) mailbox.getMailboxId(), range)
-            .flatMap(currentMetaData -> modSeqProvider.nextModSeqReactive(mailbox.getMailboxId())
-                .flatMap(newModSeq -> updateFlags(currentMetaData, flagsUpdateCalculator, newModSeq)));
+            .collectList()
+            .flatMapMany(listMessagesMetadata -> updatedFlags(listMessagesMetadata, mailbox, flagsUpdateCalculator));
+    }
+
+    private Flux<UpdatedFlags> updatedFlags(List<ComposedMessageIdWithMetaData> listMessagesMetaData,
+                                            Mailbox mailbox,
+                                            FlagsUpdateCalculator flagsUpdateCalculator) {
+        return modSeqProvider.nextModSeqReactive(mailbox.getMailboxId())
+            .flatMapMany(newModSeq -> Flux.fromIterable(listMessagesMetaData)
+                .flatMap(messageMetaData -> updateFlags(messageMetaData, flagsUpdateCalculator, newModSeq)));
     }
 
     private Mono<UpdatedFlags> updateFlags(ComposedMessageIdWithMetaData currentMetaData,
diff --git a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageDAO.java b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageDAO.java
index c55132b59f..cbcba2943e 100644
--- a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageDAO.java
+++ b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageDAO.java
@@ -335,6 +335,7 @@ public class PostgresMailboxMessageDAO {
 
         return updateStatement.get()
             .set(USER_FLAGS, updatedFlags.getNewFlags().getUserFlags())
+            .set(MOD_SEQ, updatedFlags.getModSeq().asLong())
             .where(MAILBOX_ID.eq(mailboxId.asUuid()))
             .and(MESSAGE_UID.eq(uid.asLong()));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org