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
commit 14ec0f30507648902c221f6e38a4d9e9d341c6f3 Author: Benoit Tellier <[email protected]> AuthorDate: Sun Mar 28 23:05:22 2021 +0700 JAMES-3435 Factorize consistency choices As choosing SERIAL or QUORUM upon reads is a shared concern between mailbox and message --- .../CassandraConsistenciesConfiguration.java | 16 ++++++++++++++++ .../mailbox/cassandra/DeleteMessageListener.java | 7 ++++--- .../cassandra/mail/CassandraMailboxMapper.java | 7 ++++--- .../cassandra/mail/CassandraMailboxPathV3DAO.java | 19 +------------------ .../cassandra/mail/CassandraMessageIdMapper.java | 8 ++++---- .../mail/CassandraMessageIdToImapUidDAO.java | 19 +------------------ .../cassandra/mail/CassandraMessageMapper.java | 7 ++++--- .../mail/task/RecomputeMailboxCountersService.java | 2 +- .../mail/task/SolveMailboxInconsistenciesService.java | 2 +- .../mail/task/SolveMessageInconsistenciesService.java | 2 +- 10 files changed, 37 insertions(+), 52 deletions(-) diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/CassandraConsistenciesConfiguration.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/CassandraConsistenciesConfiguration.java index 8a70b45..a65620c 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/CassandraConsistenciesConfiguration.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/CassandraConsistenciesConfiguration.java @@ -20,11 +20,27 @@ package org.apache.james.backends.cassandra.init.configuration; import java.util.Objects; +import java.util.function.Function; import com.datastax.driver.core.ConsistencyLevel; import com.google.common.base.MoreObjects; public class CassandraConsistenciesConfiguration { + public enum ConsistencyChoice { + WEAK(CassandraConsistenciesConfiguration::getRegular), + STRONG(CassandraConsistenciesConfiguration::getLightweightTransaction); + + private final Function<CassandraConsistenciesConfiguration, ConsistencyLevel> choice; + + ConsistencyChoice(Function<CassandraConsistenciesConfiguration, ConsistencyLevel> choice) { + this.choice = choice; + } + + public ConsistencyLevel choose(CassandraConsistenciesConfiguration configuration) { + return choice.apply(configuration); + } + } + public static final CassandraConsistenciesConfiguration DEFAULT = new CassandraConsistenciesConfiguration(ConsistencyLevel.QUORUM, ConsistencyLevel.SERIAL); public static ConsistencyLevel fromString(String value) { diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/DeleteMessageListener.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/DeleteMessageListener.java index d48623b..2deefad 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/DeleteMessageListener.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/DeleteMessageListener.java @@ -19,8 +19,9 @@ package org.apache.james.mailbox.cassandra; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.STRONG; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.WEAK; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.STRONG; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.WEAK; import static org.apache.james.util.FunctionalUtils.negate; import static org.apache.james.util.ReactorUtils.DEFAULT_CONCURRENCY; @@ -258,7 +259,7 @@ public class DeleteMessageListener implements EventListener.GroupEventListener { .map(negate()); } - private CassandraMessageIdToImapUidDAO.ConsistencyChoice chooseReadConsistencyUponWrites() { + private ConsistencyChoice chooseReadConsistencyUponWrites() { if (cassandraConfiguration.isMessageWriteStrongConsistency()) { return STRONG; } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java index 4ee3a75..d372af7 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java @@ -19,8 +19,8 @@ package org.apache.james.mailbox.cassandra.mail; -import static org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathV3DAO.ConsistencyChoice.STRONG; -import static org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathV3DAO.ConsistencyChoice.WEAK; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.STRONG; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.WEAK; import java.security.SecureRandom; import java.time.Duration; @@ -29,6 +29,7 @@ import javax.inject.Inject; import org.apache.commons.lang3.tuple.Pair; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager; import org.apache.james.backends.cassandra.versions.SchemaVersion; import org.apache.james.core.Username; @@ -120,7 +121,7 @@ public class CassandraMailboxMapper implements MailboxMapper { return mailboxPathV3DAO.retrieve(path, consistencyChoice()); } - private CassandraMailboxPathV3DAO.ConsistencyChoice consistencyChoice() { + private CassandraConsistenciesConfiguration.ConsistencyChoice consistencyChoice() { if (cassandraConfiguration.isMailboxReadStrongConsistency()) { return STRONG; } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAO.java index af34896..1228691 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAO.java @@ -32,11 +32,10 @@ import static org.apache.james.mailbox.cassandra.table.CassandraMailboxPathV3Tab import static org.apache.james.mailbox.cassandra.table.CassandraMailboxPathV3Table.UIDVALIDITY; import static org.apache.james.mailbox.cassandra.table.CassandraMailboxPathV3Table.USER; -import java.util.function.Function; - import javax.inject.Inject; import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.core.Username; @@ -58,22 +57,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; public class CassandraMailboxPathV3DAO { - // todo factorize me in CassandraConsistenciesConfiguration - public enum ConsistencyChoice { - WEAK(CassandraConsistenciesConfiguration::getRegular), - STRONG(CassandraConsistenciesConfiguration::getLightweightTransaction); - - private final Function<CassandraConsistenciesConfiguration, ConsistencyLevel> choice; - - ConsistencyChoice(Function<CassandraConsistenciesConfiguration, ConsistencyLevel> choice) { - this.choice = choice; - } - - public ConsistencyLevel choose(CassandraConsistenciesConfiguration configuration) { - return choice.apply(configuration); - } - } - private final CassandraAsyncExecutor cassandraAsyncExecutor; private final CassandraUtils cassandraUtils; private final PreparedStatement delete; diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java index 1b5f58e..1224932 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java @@ -18,8 +18,8 @@ ****************************************************************/ package org.apache.james.mailbox.cassandra.mail; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.STRONG; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.WEAK; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.STRONG; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.WEAK; import static org.apache.james.util.ReactorUtils.DEFAULT_CONCURRENCY; import java.time.Duration; @@ -32,10 +32,10 @@ import javax.mail.Flags; import org.apache.commons.lang3.tuple.Pair; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; -import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.ComposedMessageId; @@ -155,7 +155,7 @@ public class CassandraMessageIdMapper implements MessageIdMapper { } } - private CassandraMessageIdToImapUidDAO.ConsistencyChoice chooseReadConsistencyUponWrites() { + private ConsistencyChoice chooseReadConsistencyUponWrites() { if (cassandraConfiguration.isMessageWriteStrongConsistency()) { return STRONG; } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java index 48f29d3..470b477 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java @@ -41,7 +41,6 @@ import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.MOD_SE import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.TABLE_NAME; import java.util.Optional; -import java.util.function.Function; import javax.inject.Inject; import javax.mail.Flags; @@ -49,6 +48,7 @@ import javax.mail.Flags.Flag; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.ModSeq; @@ -59,7 +59,6 @@ import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData; import com.datastax.driver.core.BoundStatement; -import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; @@ -74,22 +73,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; public class CassandraMessageIdToImapUidDAO { - public enum ConsistencyChoice { - STRONG(CassandraConsistenciesConfiguration::getLightweightTransaction), - WEAK(CassandraConsistenciesConfiguration::getRegular); - - private final Function<CassandraConsistenciesConfiguration, ConsistencyLevel> consistencyLevelChoice; - - - ConsistencyChoice(Function<CassandraConsistenciesConfiguration, ConsistencyLevel> consistencyLevelChoice) { - this.consistencyLevelChoice = consistencyLevelChoice; - } - - public ConsistencyLevel choose(CassandraConsistenciesConfiguration configuration) { - return consistencyLevelChoice.apply(configuration); - } - } - private static final String MOD_SEQ_CONDITION = "modSeqCondition"; private final CassandraAsyncExecutor cassandraAsyncExecutor; diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java index faa3464..0aa353a 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java @@ -19,8 +19,9 @@ package org.apache.james.mailbox.cassandra.mail; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.STRONG; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.WEAK; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.STRONG; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.WEAK; import static org.apache.james.util.ReactorUtils.DEFAULT_CONCURRENCY; import java.security.SecureRandom; @@ -418,7 +419,7 @@ public class CassandraMessageMapper implements MessageMapper { } } - private CassandraMessageIdToImapUidDAO.ConsistencyChoice chooseReadConsistencyUponWrites() { + private ConsistencyChoice chooseReadConsistencyUponWrites() { if (cassandraConfiguration.isMessageWriteStrongConsistency()) { return STRONG; } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersService.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersService.java index 4245e78..62ff851 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersService.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersService.java @@ -19,7 +19,7 @@ package org.apache.james.mailbox.cassandra.mail.task; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.STRONG; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.STRONG; import java.util.Objects; import java.util.Optional; diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java index 5f5f695..2643acc 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java @@ -19,7 +19,7 @@ package org.apache.james.mailbox.cassandra.mail.task; -import static org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathV3DAO.ConsistencyChoice.STRONG; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.STRONG; import static org.apache.james.util.ReactorUtils.DEFAULT_CONCURRENCY; import java.util.Collection; 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 a7ddc31..45564b8 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 @@ -19,7 +19,7 @@ package org.apache.james.mailbox.cassandra.mail.task; -import static org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO.ConsistencyChoice.STRONG; +import static org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration.ConsistencyChoice.STRONG; import static org.apache.james.util.ReactorUtils.publishIfPresent; import java.time.Duration; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
