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

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

commit 28fc635f5a8f52fa99caa353ed5768a52c9ed50b
Author: Benoit TELLIER <[email protected]>
AuthorDate: Thu Jun 18 13:15:52 2026 +0200

    [FIX] Account for consistency choices within 
SolveMessageInconsistenciesService
---
 .../task/SolveMessageInconsistenciesService.java    | 21 +++++++++++++++++----
 .../SolveMessageInconsistenciesServiceTest.java     |  2 +-
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesService.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesService.java
index 0aee0509a9..c3713aadb2 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesService.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesService.java
@@ -20,6 +20,7 @@
 package org.apache.james.mailbox.cassandra.mail.task;
 
 import static 
org.apache.james.backends.cassandra.init.configuration.JamesExecutionProfiles.ConsistencyChoice.STRONG;
+import static 
org.apache.james.backends.cassandra.init.configuration.JamesExecutionProfiles.ConsistencyChoice.WEAK;
 import static org.apache.james.util.ReactorUtils.publishIfPresent;
 
 import java.time.Duration;
@@ -33,6 +34,8 @@ import java.util.function.Predicate;
 import jakarta.inject.Inject;
 import jakarta.mail.Flags;
 
+import 
org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
+import 
org.apache.james.backends.cassandra.init.configuration.JamesExecutionProfiles.ConsistencyChoice;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
@@ -422,11 +425,21 @@ public class SolveMessageInconsistenciesService {
 
     private final CassandraMessageIdToImapUidDAO messageIdToImapUidDAO;
     private final CassandraMessageIdDAO messageIdDAO;
+    private final CassandraConfiguration cassandraConfiguration;
 
     @Inject
-    SolveMessageInconsistenciesService(CassandraMessageIdToImapUidDAO 
messageIdToImapUidDAO, CassandraMessageIdDAO messageIdDAO) {
+    SolveMessageInconsistenciesService(CassandraMessageIdToImapUidDAO 
messageIdToImapUidDAO, CassandraMessageIdDAO messageIdDAO,
+                                       CassandraConfiguration 
cassandraConfiguration) {
         this.messageIdToImapUidDAO = messageIdToImapUidDAO;
         this.messageIdDAO = messageIdDAO;
+        this.cassandraConfiguration = cassandraConfiguration;
+    }
+
+    private ConsistencyChoice chooseReadConsistency() {
+        if (cassandraConfiguration.isMessageWriteStrongConsistency()) {
+            return STRONG;
+        }
+        return WEAK;
     }
 
     public Mono<Task.Result> fixMessageInconsistencies(Context context, 
RunningOptions runningOptions) {
@@ -470,7 +483,7 @@ public class SolveMessageInconsistenciesService {
     }
 
     private Mono<Inconsistency> detectOutdatedMessageIdEntry(CassandraId 
mailboxId, CassandraMessageId messageId, CassandraMessageMetadata 
messageIdRecord) {
-        return messageIdToImapUidDAO.retrieve(messageId, 
Optional.of(mailboxId), STRONG)
+        return messageIdToImapUidDAO.retrieve(messageId, 
Optional.of(mailboxId), chooseReadConsistency())
             .filter(Predicate.not(Predicate.isEqual(messageIdRecord)))
             .<Inconsistency>map(upToDateMessageFromImapUid -> new 
OutdatedMessageIdEntry(messageIdRecord, upToDateMessageFromImapUid))
             .next()
@@ -478,7 +491,7 @@ public class SolveMessageInconsistenciesService {
     }
 
     private Mono<Inconsistency> detectOrphanImapUidEntry(CassandraId 
mailboxId, CassandraMessageId messageId) {
-        return messageIdToImapUidDAO.retrieve(messageId, 
Optional.of(mailboxId), STRONG)
+        return messageIdToImapUidDAO.retrieve(messageId, 
Optional.of(mailboxId), chooseReadConsistency())
             .next()
             .<Inconsistency>map(OrphanImapUidEntry::new)
             .switchIfEmpty(Mono.just(NO_INCONSISTENCY));
@@ -496,7 +509,7 @@ public class SolveMessageInconsistenciesService {
 
     private Mono<Inconsistency> 
detectInconsistencyInMessageId(CassandraMessageMetadata message) {
         return messageIdToImapUidDAO.retrieve((CassandraMessageId) 
message.getComposedMessageId().getComposedMessageId().getMessageId(),
-                Optional.of((CassandraId) 
message.getComposedMessageId().getComposedMessageId().getMailboxId()), STRONG)
+                Optional.of((CassandraId) 
message.getComposedMessageId().getComposedMessageId().getMailboxId()), 
chooseReadConsistency())
             .map(uidRecord -> NO_INCONSISTENCY)
             .next()
             .switchIfEmpty(detectOrphanMessageIdEntry(message))
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
index 7f59a0db0d..decabe8663 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
@@ -76,7 +76,7 @@ public class SolveMessageInconsistenciesServiceTest {
             new CassandraMessageId.Factory(),
             CassandraConfiguration.DEFAULT_CONFIGURATION);
         messageIdDAO = new CassandraMessageIdDAO(cassandra.getConf(), 
blobIdFactory, new CassandraMessageId.Factory());
-        testee = new SolveMessageInconsistenciesService(imapUidDAO, 
messageIdDAO);
+        testee = new SolveMessageInconsistenciesService(imapUidDAO, 
messageIdDAO, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to