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