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 b3e77c68dd43321cbe60b100abedd9967ec0628b Author: Gautier DI FOLCO <gdifo...@linagora.com> AuthorDate: Tue Jun 16 18:37:27 2020 +0200 JAMES-3224 Parameterize ConsistencyLevel.{QUORUM, SERIAL} --- .../cassandra/CassandraClusterExtension.java | 11 +++++++++ .../eventstore/cassandra/EventStoreDao.scala | 11 ++++++--- .../cassandra/CassandraEventStoreExtension.scala | 2 +- .../mailbox/cassandra/mail/CassandraACLMapper.java | 8 +++++-- .../cassandra/mail/CassandraAttachmentDAOV2.java | 10 +++++--- .../cassandra/mail/CassandraMailboxDAO.java | 16 +++++++++---- .../mail/CassandraMailboxPathDAOImpl.java | 16 +++++++++---- .../cassandra/mail/CassandraMailboxPathV2DAO.java | 12 ++++++---- .../cassandra/mail/CassandraMessageDAO.java | 18 ++++++++++----- .../mail/CassandraMessageIdToImapUidDAO.java | 8 +++++-- .../cassandra/mail/CassandraModSeqProvider.java | 8 +++++-- .../cassandra/mail/CassandraUidProvider.java | 8 +++++-- .../cassandra/CassandraMailboxManagerTest.java | 25 ++++++++++++++++---- .../cassandra/mail/CassandraACLMapperTest.java | 3 ++- .../mail/CassandraAttachmentDAOV2Test.java | 5 +++- .../cassandra/mail/CassandraMailboxDAOTest.java | 5 +++- .../cassandra/mail/CassandraMailboxMapperTest.java | 9 ++++---- .../mail/CassandraMailboxPathDAOImplTest.java | 5 +++- .../mail/CassandraMailboxPathV2DAOTest.java | 5 +++- .../cassandra/mail/CassandraMapperProvider.java | 9 ++++++-- .../cassandra/mail/CassandraMessageDAOTest.java | 9 ++++++-- .../mail/CassandraMessageIdMapperTest.java | 9 ++++++-- .../mail/CassandraMessageIdToImapUidDAOTest.java | 5 +++- .../cassandra/mail/CassandraMessageMapperTest.java | 9 ++++++-- .../cassandra/mail/CassandraMessageMoveTest.java | 4 +++- .../CassandraMessageWithAttachmentMapperTest.java | 4 +++- .../mail/CassandraModSeqProviderTest.java | 5 +++- .../cassandra/mail/CassandraUidProviderTest.java | 5 +++- .../mail/migration/MailboxPathV2MigrationTest.java | 17 ++++++++++---- .../task/RecomputeMailboxCountersServiceTest.java | 10 ++++++-- .../SolveMailboxInconsistenciesServiceTest.java | 10 ++++++-- .../SolveMessageInconsistenciesServiceTest.java | 5 +++- .../mailbox/cassandra/mail/utils/GuiceUtils.java | 11 +++++---- ...ventSourcingDLPConfigurationStoreExtension.java | 3 ++- .../RabbitMQMailQueueConfigurationChangeTest.java | 1 + .../queue/rabbitmq/RabbitMQMailQueueTest.java | 27 +++++++++++++--------- .../CassandraMailQueueViewTestFactory.java | 12 ++++++++-- 37 files changed, 251 insertions(+), 89 deletions(-) diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterExtension.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterExtension.java index 68b5478..f28d09d 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterExtension.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterExtension.java @@ -20,6 +20,8 @@ package org.apache.james.backends.cassandra; import org.apache.james.backends.cassandra.components.CassandraModule; +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.ClusterConfiguration; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterEachCallback; @@ -33,11 +35,16 @@ import org.junit.jupiter.api.extension.ParameterResolver; public class CassandraClusterExtension implements BeforeAllCallback, BeforeEachCallback, AfterAllCallback, AfterEachCallback, ParameterResolver { private final DockerCassandraExtension cassandraExtension; private final CassandraModule cassandraModule; + private final CassandraConfiguration cassandraConfiguration; + private final CassandraConsistenciesConfiguration consistencyLevelsConfiguration; private CassandraCluster cassandraCluster; public CassandraClusterExtension(CassandraModule cassandraModule) { this.cassandraModule = cassandraModule; this.cassandraExtension = new DockerCassandraExtension(); + this.cassandraConfiguration = CassandraConfiguration.builder().build(); + this.consistencyLevelsConfiguration = CassandraConsistenciesConfiguration + .fromConfiguration(this.cassandraConfiguration); } @Override @@ -109,4 +116,8 @@ public class CassandraClusterExtension implements BeforeAllCallback, BeforeEachC public CassandraCluster getCassandraCluster() { return cassandraCluster; } + + public CassandraConsistenciesConfiguration getCassandraConsistenciesConfiguration() { + return consistencyLevelsConfiguration; + } } diff --git a/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala b/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala index 5921733..60ded33 100644 --- a/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala +++ b/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala @@ -18,19 +18,24 @@ ****************************************************************/ package org.apache.james.eventsourcing.eventstore.cassandra -import com.datastax.driver.core.ConsistencyLevel.SERIAL import com.datastax.driver.core._ import com.datastax.driver.core.querybuilder.QueryBuilder import com.datastax.driver.core.querybuilder.QueryBuilder.{bindMarker, insertInto} import javax.inject.Inject + +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor import org.apache.james.eventsourcing.eventstore.History import org.apache.james.eventsourcing.eventstore.cassandra.CassandraEventStoreTable.{AGGREGATE_ID, EVENT, EVENTS_TABLE, EVENT_ID} import org.apache.james.eventsourcing.{AggregateId, Event} + import reactor.core.scala.publisher.{SFlux, SMono} -class EventStoreDao @Inject() (val session: Session, val jsonEventSerializer: JsonEventSerializer) { +class EventStoreDao @Inject() (val session: Session, + val jsonEventSerializer: JsonEventSerializer, + val consistenciesConfiguration: CassandraConsistenciesConfiguration) { private val cassandraAsyncExecutor = new CassandraAsyncExecutor(session) + private val consistencyLevel: ConsistencyLevel = consistenciesConfiguration.getLightweightTransaction private val insert = prepareInsert(session) private val select = prepareSelect(session) @@ -75,7 +80,7 @@ class EventStoreDao @Inject() (val session: Session, val jsonEventSerializer: Js private[cassandra] def getEventsOfAggregate(aggregateId: AggregateId): SMono[History] = { val preparedStatement = select.bind.setString(AGGREGATE_ID, aggregateId.asAggregateKey) - .setConsistencyLevel(SERIAL) + .setConsistencyLevel(consistencyLevel) val rows: SFlux[Row] = SFlux[Row](cassandraAsyncExecutor.executeRows(preparedStatement)) val events: SFlux[Event] = rows.map(toEvent) diff --git a/event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.scala b/event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.scala index dd8f7d8..f480cc0 100644 --- a/event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.scala +++ b/event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.scala @@ -43,7 +43,7 @@ class CassandraEventStoreExtension(var cassandra: CassandraClusterExtension, val override def afterAll(context: ExtensionContext): Unit = cassandra.afterAll(context) override def beforeEach(context: ExtensionContext): Unit = eventStoreDao = - Some(new EventStoreDao(cassandra.getCassandraCluster.getConf, eventSerializer)) + Some(new EventStoreDao(cassandra.getCassandraCluster.getConf, eventSerializer, cassandra.getCassandraConsistenciesConfiguration)) override def afterEach(context: ExtensionContext): Unit = cassandra.afterEach(context) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java index 0ff9efa..cda7f9f 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java @@ -32,6 +32,7 @@ import java.util.function.Function; import javax.inject.Inject; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.cassandra.ids.CassandraId; @@ -66,11 +67,14 @@ public class CassandraACLMapper { private final PreparedStatement conditionalUpdateStatement; private final PreparedStatement readStatement; private final PreparedStatement deleteStatement; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraACLMapper(Session session, CassandraUserMailboxRightsDAO userMailboxRightsDAO, CassandraConfiguration cassandraConfiguration) { + public CassandraACLMapper(Session session, CassandraUserMailboxRightsDAO userMailboxRightsDAO, + CassandraConfiguration cassandraConfiguration, CassandraConsistenciesConfiguration consistenciesConfiguration) { this.executor = new CassandraAsyncExecutor(session); this.maxAclRetry = cassandraConfiguration.getAclMaxRetry(); + this.consistencyLevel = consistenciesConfiguration.getLightweightTransaction(); this.conditionalInsertStatement = prepareConditionalInsert(session); this.conditionalUpdateStatement = prepareConditionalUpdate(session); this.readStatement = prepareReadStatement(session); @@ -150,7 +154,7 @@ public class CassandraACLMapper { return executor.executeSingleRow( readStatement.bind() .setUUID(CassandraACLTable.ID, cassandraId.asUuid()) - .setConsistencyLevel(ConsistencyLevel.SERIAL)); + .setConsistencyLevel(consistencyLevel)); } private Mono<MailboxACL> updateStoredACL(CassandraId cassandraId, ACLWithVersion aclWithVersion) { diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java index 6659868..5eae589 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java @@ -19,7 +19,6 @@ package org.apache.james.mailbox.cassandra.mail; -import static com.datastax.driver.core.ConsistencyLevel.QUORUM; import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; @@ -36,12 +35,14 @@ import java.util.Objects; import javax.inject.Inject; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.blob.api.BlobId; import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.ContentType; +import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; @@ -128,11 +129,14 @@ public class CassandraAttachmentDAOV2 { private final PreparedStatement insertStatement; private final PreparedStatement deleteStatement; private final PreparedStatement selectStatement; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraAttachmentDAOV2(BlobId.Factory blobIdFactory, Session session) { + public CassandraAttachmentDAOV2(BlobId.Factory blobIdFactory, Session session, + CassandraConsistenciesConfiguration consistenciesConfiguration) { this.blobIdFactory = blobIdFactory; this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); + this.consistencyLevel = consistenciesConfiguration.getRegular(); this.selectStatement = prepareSelect(session); this.insertStatement = prepareInsert(session); @@ -166,7 +170,7 @@ public class CassandraAttachmentDAOV2 { return cassandraAsyncExecutor.executeSingleRow( selectStatement.bind() .setUUID(ID_AS_UUID, attachmentId.asUUID()) - .setConsistencyLevel(QUORUM)) + .setConsistencyLevel(consistencyLevel)) .map(row -> CassandraAttachmentDAOV2.fromRow(row, blobIdFactory)); } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java index 6daf88e..92b0142 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java @@ -19,7 +19,6 @@ package org.apache.james.mailbox.cassandra.mail; -import static com.datastax.driver.core.ConsistencyLevel.QUORUM; import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; @@ -36,6 +35,7 @@ import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.UID import javax.inject.Inject; import org.apache.james.backends.cassandra.init.CassandraTypesProvider; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.core.Username; @@ -46,6 +46,7 @@ import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.UidValidity; +import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; @@ -66,10 +67,14 @@ public class CassandraMailboxDAO { private final PreparedStatement insertStatement; private final PreparedStatement updateStatement; private final PreparedStatement updateUidValidityStatement; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils) { + public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, + CassandraConsistenciesConfiguration consistenciesConfiguration, + CassandraUtils cassandraUtils) { this.executor = new CassandraAsyncExecutor(session); + this.consistencyLevel = consistenciesConfiguration.getRegular(); this.mailboxBaseTupleUtil = new MailboxBaseTupleUtil(typesProvider); this.insertStatement = prepareInsert(session); this.updateStatement = prepareUpdate(session); @@ -81,8 +86,9 @@ public class CassandraMailboxDAO { } @VisibleForTesting - public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider) { - this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION); + public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, + CassandraConsistenciesConfiguration consistenciesConfiguration) { + this(session, typesProvider, consistenciesConfiguration, CassandraUtils.WITH_DEFAULT_CONFIGURATION); } private PreparedStatement prepareInsert(Session session) { @@ -145,7 +151,7 @@ public class CassandraMailboxDAO { public Mono<Mailbox> retrieveMailbox(CassandraId mailboxId) { return executor.executeSingleRow(readStatement.bind() .setUUID(ID, mailboxId.asUuid()) - .setConsistencyLevel(QUORUM)) + .setConsistencyLevel(consistencyLevel)) .flatMap(row -> mailboxFromRow(row, mailboxId)); } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java index 291f02a..e33a567 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java @@ -19,7 +19,6 @@ package org.apache.james.mailbox.cassandra.mail; -import static com.datastax.driver.core.ConsistencyLevel.QUORUM; import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; import static com.datastax.driver.core.querybuilder.QueryBuilder.count; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; @@ -35,6 +34,7 @@ import static org.apache.james.mailbox.cassandra.table.CassandraMailboxPathTable import javax.inject.Inject; import org.apache.james.backends.cassandra.init.CassandraTypesProvider; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.core.Username; @@ -46,6 +46,7 @@ import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.util.FunctionalUtils; import org.apache.james.util.ReactorUtils; +import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; @@ -68,12 +69,16 @@ public class CassandraMailboxPathDAOImpl { private final PreparedStatement selectAllForUser; private final PreparedStatement selectAll; private final PreparedStatement countAll; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils) { + public CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider, + CassandraUtils cassandraUtils, + CassandraConsistenciesConfiguration consistenciesConfiguration) { this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); this.mailboxBaseTupleUtil = new MailboxBaseTupleUtil(typesProvider); this.cassandraUtils = cassandraUtils; + this.consistencyLevel = consistenciesConfiguration.getRegular(); this.insert = prepareInsert(session); this.delete = prepareDelete(session); this.select = prepareSelect(session); @@ -83,8 +88,9 @@ public class CassandraMailboxPathDAOImpl { } @VisibleForTesting - public CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider) { - this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION); + public CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider, + CassandraConsistenciesConfiguration consistenciesConfiguration) { + this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION, consistenciesConfiguration); } private PreparedStatement prepareDelete(Session session) { @@ -129,7 +135,7 @@ public class CassandraMailboxPathDAOImpl { select.bind() .setUDTValue(NAMESPACE_AND_USER, mailboxBaseTupleUtil.createMailboxBaseUDT(mailboxPath.getNamespace(), mailboxPath.getUser())) .setString(MAILBOX_NAME, mailboxPath.getName()) - .setConsistencyLevel(QUORUM)) + .setConsistencyLevel(consistencyLevel)) .map(this::fromRowToCassandraIdAndPath) .map(FunctionalUtils.toFunction(this::logGhostMailboxSuccess)) .switchIfEmpty(ReactorUtils.executeAndEmpty(() -> logGhostMailboxFailure(mailboxPath))); diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java index b89a755..c0202f0 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java @@ -19,7 +19,6 @@ package org.apache.james.mailbox.cassandra.mail; -import static com.datastax.driver.core.ConsistencyLevel.SERIAL; import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; @@ -34,6 +33,7 @@ import static org.apache.james.mailbox.cassandra.table.CassandraMailboxPathV2Tab import javax.inject.Inject; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.core.Username; @@ -43,6 +43,7 @@ import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.util.FunctionalUtils; import org.apache.james.util.ReactorUtils; +import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; @@ -59,10 +60,13 @@ public class CassandraMailboxPathV2DAO { private final PreparedStatement select; private final PreparedStatement selectUser; private final PreparedStatement selectAll; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraMailboxPathV2DAO(Session session, CassandraUtils cassandraUtils) { + public CassandraMailboxPathV2DAO(Session session, CassandraUtils cassandraUtils, + CassandraConsistenciesConfiguration consistenciesConfiguration) { this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); + this.consistencyLevel = consistenciesConfiguration.getLightweightTransaction(); this.cassandraUtils = cassandraUtils; this.insert = prepareInsert(session); this.delete = prepareDelete(session); @@ -115,7 +119,7 @@ public class CassandraMailboxPathV2DAO { .setString(NAMESPACE, mailboxPath.getNamespace()) .setString(USER, sanitizeUser(mailboxPath.getUser())) .setString(MAILBOX_NAME, mailboxPath.getName()) - .setConsistencyLevel(SERIAL)) + .setConsistencyLevel(consistencyLevel)) .map(this::fromRowToCassandraIdAndPath) .map(FunctionalUtils.toFunction(this::logGhostMailboxSuccess)) .switchIfEmpty(ReactorUtils.executeAndEmpty(() -> logGhostMailboxFailure(mailboxPath))); @@ -126,7 +130,7 @@ public class CassandraMailboxPathV2DAO { selectUser.bind() .setString(NAMESPACE, namespace) .setString(USER, sanitizeUser(user)) - .setConsistencyLevel(SERIAL)) + .setConsistencyLevel(consistencyLevel)) .flatMapMany(cassandraUtils::convertToFlux) .map(this::fromRowToCassandraIdAndPath) .map(FunctionalUtils.toFunction(this::logReadSuccess)); diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java index 800b296..8c447d7 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java @@ -19,7 +19,6 @@ package org.apache.james.mailbox.cassandra.mail; -import static com.datastax.driver.core.ConsistencyLevel.QUORUM; import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; @@ -54,6 +53,7 @@ import javax.mail.util.SharedByteArrayInputStream; import org.apache.commons.io.IOUtils; import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.BlobStore; @@ -72,6 +72,7 @@ import org.apache.james.mailbox.store.mail.model.Property; import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder; import com.datastax.driver.core.BoundStatement; +import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; @@ -104,12 +105,15 @@ public class CassandraMessageDAO { private final PreparedStatement selectBody; private final PreparedStatement selectAllMessagesWithAttachment; private final Cid.CidParser cidParser; + private final ConsistencyLevel consistencyLevel; @Inject public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, BlobStore blobStore, - BlobId.Factory blobIdFactory, CassandraConfiguration cassandraConfiguration, - CassandraMessageId.Factory messageIdFactory) { + BlobId.Factory blobIdFactory, CassandraConfiguration cassandraConfiguration, + CassandraConsistenciesConfiguration consistenciesConfiguration, + CassandraMessageId.Factory messageIdFactory) { this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); + this.consistencyLevel = consistenciesConfiguration.getRegular(); this.typesProvider = typesProvider; this.blobStore = blobStore; this.blobIdFactory = blobIdFactory; @@ -128,8 +132,10 @@ public class CassandraMessageDAO { @VisibleForTesting public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, BlobStore blobStore, - BlobId.Factory blobIdFactory, CassandraMessageId.Factory messageIdFactory) { - this(session, typesProvider, blobStore, blobIdFactory, CassandraConfiguration.DEFAULT_CONFIGURATION, messageIdFactory); + BlobId.Factory blobIdFactory, CassandraMessageId.Factory messageIdFactory, + CassandraConsistenciesConfiguration consistenciesConfiguration) { + this(session, typesProvider, blobStore, blobIdFactory, CassandraConfiguration.DEFAULT_CONFIGURATION, + consistenciesConfiguration, messageIdFactory); } private PreparedStatement prepareSelect(Session session, String[] fields) { @@ -239,7 +245,7 @@ public class CassandraMessageDAO { return cassandraAsyncExecutor.execute(retrieveSelect(fetchType) .bind() .setUUID(MESSAGE_ID, messageId.get()) - .setConsistencyLevel(QUORUM)); + .setConsistencyLevel(consistencyLevel)); } private Mono<MessageRepresentation> 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 91cf3e3..e12e2de 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 @@ -46,6 +46,7 @@ import javax.inject.Inject; import javax.mail.Flags; import javax.mail.Flags.Flag; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.ModSeq; @@ -78,10 +79,13 @@ public class CassandraMessageIdToImapUidDAO { private final PreparedStatement selectAll; private final PreparedStatement select; private final PreparedStatement listStatement; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraMessageIdToImapUidDAO(Session session, CassandraMessageId.Factory messageIdFactory) { + public CassandraMessageIdToImapUidDAO(Session session, CassandraConsistenciesConfiguration consistenciesConfiguration, + CassandraMessageId.Factory messageIdFactory) { this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); + this.consistencyLevel = consistenciesConfiguration.getLightweightTransaction(); this.messageIdFactory = messageIdFactory; this.delete = prepareDelete(session); this.insert = prepareInsert(session); @@ -195,7 +199,7 @@ public class CassandraMessageIdToImapUidDAO { public Flux<ComposedMessageIdWithMetaData> retrieve(CassandraMessageId messageId, Optional<CassandraId> mailboxId) { return cassandraAsyncExecutor.executeRows( selectStatement(messageId, mailboxId) - .setConsistencyLevel(ConsistencyLevel.SERIAL)) + .setConsistencyLevel(consistencyLevel)) .map(this::toComposedMessageIdWithMetadata); } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java index fc1647c..e41df05 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java @@ -38,6 +38,7 @@ import java.util.function.Supplier; import javax.inject.Inject; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.mailbox.ModSeq; import org.apache.james.mailbox.cassandra.ids.CassandraId; @@ -87,10 +88,13 @@ public class CassandraModSeqProvider implements ModSeqProvider { private final PreparedStatement select; private final PreparedStatement update; private final PreparedStatement insert; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraModSeqProvider(Session session, CassandraConfiguration cassandraConfiguration) { + public CassandraModSeqProvider(Session session, CassandraConfiguration cassandraConfiguration, + CassandraConsistenciesConfiguration consistenciesConfiguration) { this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); + this.consistencyLevel = consistenciesConfiguration.getLightweightTransaction(); this.maxModSeqRetries = cassandraConfiguration.getModSeqMaxRetry(); this.insert = prepareInsert(session); this.update = prepareUpdate(session); @@ -148,7 +152,7 @@ public class CassandraModSeqProvider implements ModSeqProvider { return cassandraAsyncExecutor.executeSingleRowOptional( select.bind() .setUUID(MAILBOX_ID, mailboxId.asUuid()) - .setConsistencyLevel(ConsistencyLevel.SERIAL)) + .setConsistencyLevel(consistencyLevel)) .map(maybeRow -> maybeRow.map(row -> ModSeq.of(row.getLong(NEXT_MODSEQ)))); } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java index 86fa061..da048f0 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java @@ -36,6 +36,7 @@ import java.util.Optional; import javax.inject.Inject; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.cassandra.ids.CassandraId; @@ -60,10 +61,13 @@ public class CassandraUidProvider implements UidProvider { private final PreparedStatement insertStatement; private final PreparedStatement updateStatement; private final PreparedStatement selectStatement; + private final ConsistencyLevel consistencyLevel; @Inject - public CassandraUidProvider(Session session, CassandraConfiguration cassandraConfiguration) { + public CassandraUidProvider(Session session, CassandraConfiguration cassandraConfiguration, + CassandraConsistenciesConfiguration consistenciesConfiguration) { this.executor = new CassandraAsyncExecutor(session); + this.consistencyLevel = consistenciesConfiguration.getLightweightTransaction(); this.maxUidRetries = cassandraConfiguration.getUidMaxRetry(); this.selectStatement = prepareSelect(session); this.updateStatement = prepareUpdate(session); @@ -125,7 +129,7 @@ public class CassandraUidProvider implements UidProvider { return executor.executeSingleRow( selectStatement.bind() .setUUID(MAILBOX_ID, mailboxId.asUuid()) - .setConsistencyLevel(ConsistencyLevel.SERIAL)) + .setConsistencyLevel(consistencyLevel)) .map(row -> MessageUid.of(row.getLong(NEXT_UID))); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java index cc1a026..9b14082 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java @@ -756,7 +756,11 @@ public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMai } private CassandraACLMapper aclMapper(CassandraCluster cassandraCluster) { - return new CassandraACLMapper(cassandraCluster.getConf(), rightsDAO(cassandraCluster), CassandraConfiguration.DEFAULT_CONFIGURATION); + return new CassandraACLMapper( + cassandraCluster.getConf(), + rightsDAO(cassandraCluster), + CassandraConfiguration.DEFAULT_CONFIGURATION, + cassandra.getCassandraConsistenciesConfiguration()); } private CassandraUserMailboxRightsDAO rightsDAO(CassandraCluster cassandraCluster) { @@ -768,7 +772,10 @@ public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMai } private CassandraAttachmentDAOV2 attachmentDAO(CassandraCluster cassandraCluster) { - return new CassandraAttachmentDAOV2(new HashBlobId.Factory(), cassandraCluster.getConf()); + return new CassandraAttachmentDAOV2( + new HashBlobId.Factory(), + cassandraCluster.getConf(), + cassandra.getCassandraConsistenciesConfiguration()); } private CassandraMessageIdDAO messageIdDAO(CassandraCluster cassandraCluster) { @@ -776,12 +783,20 @@ public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMai } private CassandraMessageIdToImapUidDAO imapUidDAO(CassandraCluster cassandraCluster) { - return new CassandraMessageIdToImapUidDAO(cassandraCluster.getConf(), new CassandraMessageId.Factory()); + return new CassandraMessageIdToImapUidDAO( + cassandraCluster.getConf(), + cassandra.getCassandraConsistenciesConfiguration(), + new CassandraMessageId.Factory()); } private CassandraMessageDAO messageDAO(CassandraCluster cassandraCluster) { - return new CassandraMessageDAO(cassandraCluster.getConf(), cassandraCluster.getTypesProvider(), - mock(BlobStore.class), new HashBlobId.Factory(), new CassandraMessageId.Factory()); + return new CassandraMessageDAO( + cassandraCluster.getConf(), + cassandraCluster.getTypesProvider(), + mock(BlobStore.class), + new HashBlobId.Factory(), + new CassandraMessageId.Factory(), + cassandra.getCassandraConsistenciesConfiguration()); } } } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java index f5b3eb7..8f2486b 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java @@ -242,7 +242,8 @@ class CassandraACLMapperTest { CassandraACLMapper aclMapper = new CassandraACLMapper( cassandra.getConf(), new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION), - CassandraConfiguration.DEFAULT_CONFIGURATION); + CassandraConfiguration.DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); aclMapper.updateACL(MAILBOX_ID, MailboxACL.command().key(key).rights(rights).asAddition()).block(); return true; diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java index 00e5e6f..0da5b98 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java @@ -47,7 +47,10 @@ class CassandraAttachmentDAOV2Test { @BeforeEach void setUp(CassandraCluster cassandra) { - testee = new CassandraAttachmentDAOV2(BLOB_ID_FACTORY, cassandra.getConf()); + testee = new CassandraAttachmentDAOV2( + BLOB_ID_FACTORY, + cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration()); } @Test diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java index b7b570d..08bdcf5 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java @@ -69,7 +69,10 @@ class CassandraMailboxDAOTest { @BeforeEach void setUp(CassandraCluster cassandra) { - testee = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider()); + testee = new CassandraMailboxDAO( + cassandra.getConf(), + cassandra.getTypesProvider(), + cassandraCluster.getCassandraConsistenciesConfiguration()); mailbox1 = new Mailbox(MailboxPath.forUser(USER, "abcd"), UID_VALIDITY_1, diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java index 29f4158..ea6ce6b 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java @@ -89,14 +89,15 @@ class CassandraMailboxMapperTest { @BeforeEach void setUp() { CassandraCluster cassandra = cassandraCluster.getCassandraCluster(); - mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider()); - mailboxPathDAO = new CassandraMailboxPathDAOImpl(cassandra.getConf(), cassandra.getTypesProvider()); - mailboxPathV2DAO = new CassandraMailboxPathV2DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); + mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), cassandraCluster.getCassandraConsistenciesConfiguration()); + mailboxPathDAO = new CassandraMailboxPathDAOImpl(cassandra.getConf(), cassandra.getTypesProvider(), cassandraCluster.getCassandraConsistenciesConfiguration()); + mailboxPathV2DAO = new CassandraMailboxPathV2DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION, cassandraCluster.getCassandraConsistenciesConfiguration()); CassandraUserMailboxRightsDAO userMailboxRightsDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); CassandraACLMapper aclMapper = new CassandraACLMapper( cassandra.getConf(), new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION), - CassandraConfiguration.DEFAULT_CONFIGURATION); + CassandraConfiguration.DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); testee = new CassandraMailboxMapper( mailboxDAO, mailboxPathDAO, diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java index 9b88ebd..15b8eb0 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java @@ -50,7 +50,10 @@ class CassandraMailboxPathDAOImplTest { @BeforeEach void setUp(CassandraCluster cassandra) { - testee = new CassandraMailboxPathDAOImpl(cassandra.getConf(), cassandra.getTypesProvider()); + testee = new CassandraMailboxPathDAOImpl( + cassandra.getConf(), + cassandra.getTypesProvider(), + cassandraCluster.getCassandraConsistenciesConfiguration()); } @Test diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java index 2cb04d3..742988b 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java @@ -51,7 +51,10 @@ class CassandraMailboxPathV2DAOTest { @BeforeEach void setUp(CassandraCluster cassandra) { - testee = new CassandraMailboxPathV2DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); + testee = new CassandraMailboxPathV2DAO( + cassandra.getConf(), + CassandraUtils.WITH_DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); } @Test diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java index befae86..ca5a756 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.core.Username; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; @@ -54,10 +55,14 @@ public class CassandraMapperProvider implements MapperProvider { private final MailboxSession mailboxSession = MailboxSessionUtil.create(Username.of("benwa")); private CassandraMailboxSessionMapperFactory mapperFactory; - public CassandraMapperProvider(CassandraCluster cassandra) { + public CassandraMapperProvider(CassandraCluster cassandra, + CassandraConsistenciesConfiguration cassandraConsistenciesConfiguration) { this.cassandra = cassandra; messageUidProvider = new MessageUidProvider(); - cassandraModSeqProvider = new CassandraModSeqProvider(this.cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION); + cassandraModSeqProvider = new CassandraModSeqProvider( + this.cassandra.getConf(), + CassandraConfiguration.DEFAULT_CONFIGURATION, + cassandraConsistenciesConfiguration); mapperFactory = createMapperFactory(); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java index 7ee6030..7ac448b 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java @@ -89,8 +89,13 @@ class CassandraMessageDAOTest { messageId = messageIdFactory.generate(); CassandraBlobStore blobStore = CassandraBlobStore.forTesting(cassandra.getConf()); HashBlobId.Factory blobIdFactory = new HashBlobId.Factory(); - testee = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), blobStore, blobIdFactory, - new CassandraMessageId.Factory()); + testee = new CassandraMessageDAO( + cassandra.getConf(), + cassandra.getTypesProvider(), + blobStore, + blobIdFactory, + new CassandraMessageId.Factory(), + cassandraCluster.getCassandraConsistenciesConfiguration()); messageIdWithMetadata = ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(MAILBOX_ID, messageId, messageUid)) diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java index 104a72a..c196c71 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java @@ -56,7 +56,9 @@ class CassandraMessageIdMapperTest extends MessageIdMapperTest { @Override protected CassandraMapperProvider provideMapper() { - return new CassandraMapperProvider(cassandraCluster.getCassandraCluster()); + return new CassandraMapperProvider( + cassandraCluster.getCassandraCluster(), + cassandraCluster.getCassandraConsistenciesConfiguration()); } @Test @@ -196,7 +198,10 @@ class CassandraMessageIdMapperTest extends MessageIdMapperTest { // ignoring expected error } - CassandraMessageIdToImapUidDAO imapUidDAO = new CassandraMessageIdToImapUidDAO(cassandra.getConf(), new CassandraMessageId.Factory()); + CassandraMessageIdToImapUidDAO imapUidDAO = new CassandraMessageIdToImapUidDAO( + cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration(), + new CassandraMessageId.Factory()); SoftAssertions.assertSoftly(Throwing.consumer(softly -> { softly.assertThat(sut.find(ImmutableList.of(message1.getMessageId()), MessageMapper.FetchType.Metadata)) diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java index 5bb8d48..9ce6eb9 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java @@ -60,7 +60,10 @@ class CassandraMessageIdToImapUidDAOTest { @BeforeEach void setUp(CassandraCluster cassandra) { messageIdFactory = new CassandraMessageId.Factory(); - testee = new CassandraMessageIdToImapUidDAO(cassandra.getConf(), messageIdFactory); + testee = new CassandraMessageIdToImapUidDAO( + cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration(), + messageIdFactory); } @Test diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java index 8581377..3ace7df 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java @@ -56,7 +56,9 @@ class CassandraMessageMapperTest extends MessageMapperTest { @Override protected MapperProvider createMapperProvider() { - return new CassandraMapperProvider(cassandraCluster.getCassandraCluster()); + return new CassandraMapperProvider( + cassandraCluster.getCassandraCluster(), + cassandraCluster.getCassandraConsistenciesConfiguration()); } @Nested @@ -298,7 +300,10 @@ class CassandraMessageMapperTest extends MessageMapperTest { // ignoring expected error } - CassandraMessageIdToImapUidDAO imapUidDAO = new CassandraMessageIdToImapUidDAO(cassandra.getConf(), new CassandraMessageId.Factory()); + CassandraMessageIdToImapUidDAO imapUidDAO = new CassandraMessageIdToImapUidDAO( + cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration(), + new CassandraMessageId.Factory()); SoftAssertions.assertSoftly(Throwing.consumer(softly -> { softly.assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), FetchType.Metadata, 1)) diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java index a768098..f6fb9c1 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java @@ -30,6 +30,8 @@ class CassandraMessageMoveTest extends MessageMoveTest { @Override protected MapperProvider createMapperProvider() { - return new CassandraMapperProvider(cassandraCluster.getCassandraCluster()); + return new CassandraMapperProvider( + cassandraCluster.getCassandraCluster(), + cassandraCluster.getCassandraConsistenciesConfiguration()); } } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java index 04899ca..157e3ec 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java @@ -30,6 +30,8 @@ class CassandraMessageWithAttachmentMapperTest extends MessageWithAttachmentMapp @Override protected MapperProvider createMapperProvider() { - return new CassandraMapperProvider(cassandraCluster.getCassandraCluster()); + return new CassandraMapperProvider( + cassandraCluster.getCassandraCluster(), + cassandraCluster.getCassandraConsistenciesConfiguration()); } } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java index 3128df7..8773221 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java @@ -65,7 +65,10 @@ class CassandraModSeqProviderTest { @BeforeEach void setUp(CassandraCluster cassandra) { - modSeqProvider = new CassandraModSeqProvider(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION); + modSeqProvider = new CassandraModSeqProvider( + cassandra.getConf(), + CassandraConfiguration.DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); MailboxPath path = new MailboxPath("gsoc", Username.of("ieugen"), "Trash"); mailbox = new Mailbox(path, UidValidity.of(1234), CASSANDRA_ID); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java index 80c43b0..4901b19 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java @@ -54,7 +54,10 @@ class CassandraUidProviderTest { @BeforeEach void setUp(CassandraCluster cassandra) { - uidProvider = new CassandraUidProvider(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION); + uidProvider = new CassandraUidProvider( + cassandra.getConf(), + CassandraConfiguration.DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); MailboxPath path = new MailboxPath("gsoc", Username.of("ieugen"), "Trash"); mailbox = new Mailbox(path, UidValidity.of(1234), CASSANDRA_ID); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java index ee4be70..6ea1b36 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java @@ -72,19 +72,28 @@ class MailboxPathV2MigrationTest { daoV1 = new CassandraMailboxPathDAOImpl( cassandra.getConf(), cassandra.getTypesProvider(), - CassandraUtils.WITH_DEFAULT_CONFIGURATION); + CassandraUtils.WITH_DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); daoV2 = new CassandraMailboxPathV2DAO( cassandra.getConf(), - CassandraUtils.WITH_DEFAULT_CONFIGURATION); + CassandraUtils.WITH_DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); CassandraUserMailboxRightsDAO userMailboxRightsDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); - mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider()); + mailboxDAO = new CassandraMailboxDAO( + cassandra.getConf(), + cassandra.getTypesProvider(), + cassandraCluster.getCassandraConsistenciesConfiguration()); mailboxMapper = new CassandraMailboxMapper( mailboxDAO, daoV1, daoV2, userMailboxRightsDAO, - new CassandraACLMapper(cassandra.getConf(), userMailboxRightsDAO, CassandraConfiguration.DEFAULT_CONFIGURATION), + new CassandraACLMapper( + cassandra.getConf(), + userMailboxRightsDAO, + CassandraConfiguration.DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()), new CassandraSchemaVersionManager(new CassandraSchemaVersionDAO(cassandra.getConf()))); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java index fdf059a..8023f11 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java @@ -87,9 +87,15 @@ class RecomputeMailboxCountersServiceTest { @BeforeEach void setUp(CassandraCluster cassandra) { - mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider()); + mailboxDAO = new CassandraMailboxDAO( + cassandra.getConf(), + cassandra.getTypesProvider(), + cassandraCluster.getCassandraConsistenciesConfiguration()); imapUidToMessageIdDAO = new CassandraMessageIdDAO(cassandra.getConf(), MESSAGE_ID_FACTORY); - messageIdToImapUidDAO = new CassandraMessageIdToImapUidDAO(cassandra.getConf(), MESSAGE_ID_FACTORY); + messageIdToImapUidDAO = new CassandraMessageIdToImapUidDAO( + cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration(), + MESSAGE_ID_FACTORY); counterDAO = new CassandraMailboxCounterDAO(cassandra.getConf()); testee = new RecomputeMailboxCountersService(mailboxDAO, imapUidToMessageIdDAO, messageIdToImapUidDAO, counterDAO); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java index 491dce4..623d4a3 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java @@ -73,8 +73,14 @@ class SolveMailboxInconsistenciesServiceTest { @BeforeEach void setUp(CassandraCluster cassandra) { - mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider()); - mailboxPathV2DAO = new CassandraMailboxPathV2DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); + mailboxDAO = new CassandraMailboxDAO( + cassandra.getConf(), + cassandra.getTypesProvider(), + cassandraCluster.getCassandraConsistenciesConfiguration()); + mailboxPathV2DAO = new CassandraMailboxPathV2DAO( + cassandra.getConf(), + CassandraUtils.WITH_DEFAULT_CONFIGURATION, + cassandraCluster.getCassandraConsistenciesConfiguration()); versionDAO = new CassandraSchemaVersionDAO(cassandra.getConf()); testee = new SolveMailboxInconsistenciesService(mailboxDAO, mailboxPathV2DAO, new CassandraSchemaVersionManager(versionDAO)); 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 49ab568..c1fbb05 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 @@ -100,7 +100,10 @@ public class SolveMessageInconsistenciesServiceTest { @BeforeEach void setUp(CassandraCluster cassandra) { - imapUidDAO = new CassandraMessageIdToImapUidDAO(cassandra.getConf(), new CassandraMessageId.Factory()); + imapUidDAO = new CassandraMessageIdToImapUidDAO( + cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration(), + new CassandraMessageId.Factory()); messageIdDAO = new CassandraMessageIdDAO(cassandra.getConf(), new CassandraMessageId.Factory()); testee = new SolveMessageInconsistenciesService(imapUidDAO, messageIdDAO); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java index 4d010ca..02fc9dc 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java @@ -24,6 +24,7 @@ import static com.google.inject.Scopes.SINGLETON; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.BlobStore; import org.apache.james.blob.api.BucketName; @@ -74,11 +75,13 @@ public class GuiceUtils { binder -> binder.bind(BlobId.Factory.class).toInstance(new HashBlobId.Factory()), binder -> binder.bind(BlobStore.class).to(CassandraBlobStore.class), binder -> binder.bind(CassandraDumbBlobStore.class).in(SINGLETON), - binder -> binder.bind(BucketName.class) - .annotatedWith(Names.named(CassandraDumbBlobStore.DEFAULT_BUCKET)) - .toInstance(BucketName.DEFAULT), + binder -> binder.bind(BucketName.class) + .annotatedWith(Names.named(CassandraDumbBlobStore.DEFAULT_BUCKET)) + .toInstance(BucketName.DEFAULT), binder -> binder.bind(Session.class).toInstance(session), binder -> binder.bind(CassandraTypesProvider.class).toInstance(typesProvider), - binder -> binder.bind(CassandraConfiguration.class).toInstance(configuration)); + binder -> binder.bind(CassandraConfiguration.class).toInstance(configuration), + binder -> binder.bind(CassandraConsistenciesConfiguration.class) + .toInstance(CassandraConsistenciesConfiguration.fromConfiguration(configuration))); } } diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java index c128d12..a2bb62c 100644 --- a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java +++ b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java @@ -70,7 +70,8 @@ public class CassandraEventSourcingDLPConfigurationStoreExtension implements Bef EventStoreDao eventStoreDao = new EventStoreDao( cassandraExtension.getCassandraCluster().getConf(), - jsonEventSerializer); + jsonEventSerializer, + cassandraExtension.getCassandraConsistenciesConfiguration()); return new EventSourcingDLPConfigurationStore(new CassandraEventStore(eventStoreDao)); } diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java index f79622e..74bc055 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java @@ -107,6 +107,7 @@ class RabbitMQMailQueueConfigurationChangeTest { private RabbitMQMailQueue getRabbitMQMailQueue(CassandraCluster cassandra, CassandraMailQueueViewConfiguration mailQueueViewConfiguration) throws Exception { CassandraMailQueueView.Factory mailQueueViewFactory = CassandraMailQueueViewTestFactory.factory(clock, cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration(), mailQueueViewConfiguration, mimeMessageStoreFactory); diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java index 1b7e610..4228122 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java @@ -24,7 +24,6 @@ import static org.apache.james.queue.api.Mails.defaultMail; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.awaitility.Awaitility.await; -import static org.awaitility.Duration.FIVE_SECONDS; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -109,7 +108,8 @@ class RabbitMQMailQueueTest { @Nested class MailQueueSizeMetricsEnabled implements ManageableMailQueueContract, MailQueueMetricContract { @BeforeEach - void setup(CassandraCluster cassandra, MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem) throws Exception { + void setup(CassandraCluster cassandra, + MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem) throws Exception { setUp(cassandra, metricTestSystem, RabbitMQMailQueueConfiguration.builder() @@ -309,8 +309,8 @@ class RabbitMQMailQueueTest { setUp(cassandra, metricTestSystem, RabbitMQMailQueueConfiguration.builder() - .sizeMetricsEnabled(false) - .build()); + .sizeMetricsEnabled(false) + .build()); } @Test @@ -320,17 +320,22 @@ class RabbitMQMailQueueTest { } } - private void setUp(CassandraCluster cassandra, MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem, RabbitMQMailQueueConfiguration configuration) throws Exception { + private void setUp(CassandraCluster cassandra, + MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem, + RabbitMQMailQueueConfiguration configuration) throws Exception { CassandraBlobStore blobStore = CassandraBlobStore.forTesting(cassandra.getConf()); MimeMessageStore.Factory mimeMessageStoreFactory = MimeMessageStore.factory(blobStore); clock = new UpdatableTickingClock(IN_SLICE_1); - MailQueueView.Factory mailQueueViewFactory = CassandraMailQueueViewTestFactory.factory(clock, cassandra.getConf(), - CassandraMailQueueViewConfiguration.builder() - .bucketCount(THREE_BUCKET_COUNT) - .updateBrowseStartPace(UPDATE_BROWSE_START_PACE) - .sliceWindow(ONE_HOUR_SLICE_WINDOW) - .build(), + MailQueueView.Factory mailQueueViewFactory = CassandraMailQueueViewTestFactory.factory( + clock, + cassandra.getConf(), + cassandraCluster.getCassandraConsistenciesConfiguration(), + CassandraMailQueueViewConfiguration.builder() + .bucketCount(THREE_BUCKET_COUNT) + .updateBrowseStartPace(UPDATE_BROWSE_START_PACE) + .sliceWindow(ONE_HOUR_SLICE_WINDOW) + .build(), mimeMessageStoreFactory); RabbitMQMailQueueFactory.PrivateFactory factory = new RabbitMQMailQueueFactory.PrivateFactory( diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewTestFactory.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewTestFactory.java index 71b1e99..d7e9f04 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewTestFactory.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewTestFactory.java @@ -22,11 +22,15 @@ package org.apache.james.queue.rabbitmq.view.cassandra; import java.time.Clock; import java.util.Optional; +import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration; import org.apache.james.blob.api.HashBlobId; import org.apache.james.blob.mail.MimeMessageStore; +import org.apache.james.eventsourcing.Event; import org.apache.james.eventsourcing.eventstore.cassandra.CassandraEventStore; import org.apache.james.eventsourcing.eventstore.cassandra.EventStoreDao; import org.apache.james.eventsourcing.eventstore.cassandra.JsonEventSerializer; +import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO; +import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule; import org.apache.james.queue.rabbitmq.MailQueueName; import org.apache.james.queue.rabbitmq.view.cassandra.configuration.CassandraMailQueueViewConfiguration; import org.apache.james.queue.rabbitmq.view.cassandra.configuration.CassandraMailQueueViewConfigurationModule; @@ -38,6 +42,7 @@ import reactor.core.publisher.Mono; public class CassandraMailQueueViewTestFactory { public static CassandraMailQueueView.Factory factory(Clock clock, Session session, + CassandraConsistenciesConfiguration cassandraConsistenciesConfiguration, CassandraMailQueueViewConfiguration configuration, MimeMessageStore.Factory mimeMessageStoreFactory) { HashBlobId.Factory blobIdFactory = new HashBlobId.Factory(); @@ -51,8 +56,11 @@ public class CassandraMailQueueViewTestFactory { CassandraMailQueueMailDelete cassandraMailQueueMailDelete = new CassandraMailQueueMailDelete(deletedMailsDao, browseStartDao, cassandraMailQueueBrowser, configuration); - EventsourcingConfigurationManagement eventsourcingConfigurationManagement = new EventsourcingConfigurationManagement(new CassandraEventStore(new EventStoreDao(session, - JsonEventSerializer.forModules(CassandraMailQueueViewConfigurationModule.MAIL_QUEUE_VIEW_CONFIGURATION).withoutNestedType()))); + EventStoreDao eventStoreDao = new EventStoreDao( + session, + JsonEventSerializer.forModules(CassandraMailQueueViewConfigurationModule.MAIL_QUEUE_VIEW_CONFIGURATION).withoutNestedType(), + cassandraConsistenciesConfiguration); + EventsourcingConfigurationManagement eventsourcingConfigurationManagement = new EventsourcingConfigurationManagement(new CassandraEventStore(eventStoreDao)); return new CassandraMailQueueView.Factory( cassandraMailQueueMailStore, --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org