This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit ca750b371f8dd52fa9ac94bd3b9935a32471973a Author: Benoit Tellier <[email protected]> AuthorDate: Mon Mar 2 10:44:47 2020 +0700 JAMES-2897 Use SERIAL consistency level for mailboxPath V2 Conditional inserts and deletes are used. Not using SERIAL consistency level breaks linearizability CF https://docs.datastax.com/en/ddac/doc/datastax_enterprise/dbInternals/dbIntLtwtTransactions.html --- .../james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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 8b4c05d..7324431 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,6 +19,7 @@ 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; @@ -51,8 +52,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO { - - private final CassandraAsyncExecutor cassandraAsyncExecutor; private final CassandraUtils cassandraUtils; private final PreparedStatement delete; @@ -116,7 +115,8 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO { select.bind() .setString(NAMESPACE, mailboxPath.getNamespace()) .setString(USER, sanitizeUser(mailboxPath.getUser())) - .setString(MAILBOX_NAME, mailboxPath.getName())) + .setString(MAILBOX_NAME, mailboxPath.getName()) + .setConsistencyLevel(SERIAL)) .map(this::fromRowToCassandraIdAndPath) .map(FunctionalUtils.toFunction(this::logGhostMailboxSuccess)) .switchIfEmpty(ReactorUtils.executeAndEmpty(() -> logGhostMailboxFailure(mailboxPath))); @@ -127,7 +127,8 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO { return cassandraAsyncExecutor.execute( selectUser.bind() .setString(NAMESPACE, namespace) - .setString(USER, sanitizeUser(user))) + .setString(USER, sanitizeUser(user)) + .setConsistencyLevel(SERIAL)) .flatMapMany(resultSet -> cassandraUtils.convertToFlux(resultSet) .map(this::fromRowToCassandraIdAndPath) .map(FunctionalUtils.toFunction(this::logReadSuccess))); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
