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 2026/06/23 13:42:14 UTC
(james-project) 12/16: [FIX] Account for consistency choices within SolveMessageInconsistenciesService
This is an automated email from the ASF dual-hosted git repository.
chibenwa pushed a commit to branch 3.9.x
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 40471c17eaf1872cf87c8aab40360bb69a95d1a8
Author: Benoit TELLIER <bt...@linagora.com>
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 7f1a55d44d..afcb64b93a 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;
@@ -421,11 +424,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) {
@@ -469,7 +482,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()
@@ -477,7 +490,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));
@@ -495,7 +508,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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org