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 05e5d5bf0f5930e11c7eb9ebf74e4278137b8993 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Tue Mar 10 17:40:26 2020 +0700 JAMES-3111 Log statements using Consistency level ALL --- .../backends/cassandra/init/ClusterFactory.java | 2 +- ...licy.java => LogConsistencyAllRetryPolicy.java} | 38 +++++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java index 350f8be..dc696df 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java @@ -52,7 +52,7 @@ public class ClusterFactory { socketOptions.setReadTimeoutMillis(configuration.getReadTimeoutMillis()); socketOptions.setConnectTimeoutMillis(configuration.getConnectTimeoutMillis()); clusterBuilder.withSocketOptions(socketOptions); - clusterBuilder.withRetryPolicy(new NotConsistencyAllRetryPolicy()); + clusterBuilder.withRetryPolicy(new LogConsistencyAllRetryPolicy()); configuration.getPoolingOptions().ifPresent(clusterBuilder::withPoolingOptions); if (configuration.useSsl()) { diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/NotConsistencyAllRetryPolicy.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/LogConsistencyAllRetryPolicy.java similarity index 70% rename from backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/NotConsistencyAllRetryPolicy.java rename to backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/LogConsistencyAllRetryPolicy.java index 890e35e..0223658 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/NotConsistencyAllRetryPolicy.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/LogConsistencyAllRetryPolicy.java @@ -19,19 +19,29 @@ package org.apache.james.backends.cassandra.init; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ConsistencyLevel; +import com.datastax.driver.core.PreparedStatement; +import com.datastax.driver.core.SimpleStatement; import com.datastax.driver.core.Statement; import com.datastax.driver.core.WriteType; import com.datastax.driver.core.exceptions.DriverException; import com.datastax.driver.core.policies.DefaultRetryPolicy; import com.datastax.driver.core.policies.RetryPolicy; -public class NotConsistencyAllRetryPolicy implements RetryPolicy { +public class LogConsistencyAllRetryPolicy implements RetryPolicy { + + public static final Logger LOGGER = LoggerFactory.getLogger(LogConsistencyAllRetryPolicy.class); + @Override public RetryDecision onReadTimeout(Statement statement, ConsistencyLevel cl, int requiredResponses, int receivedResponses, boolean dataRetrieved, int nbRetry) { if (cl == ConsistencyLevel.ALL) { - return RetryDecision.retry(ConsistencyLevel.QUORUM); + log(statement); } return DefaultRetryPolicy.INSTANCE.onReadTimeout(statement, cl, requiredResponses, receivedResponses, dataRetrieved, nbRetry); } @@ -39,7 +49,7 @@ public class NotConsistencyAllRetryPolicy implements RetryPolicy { @Override public RetryDecision onWriteTimeout(Statement statement, ConsistencyLevel cl, WriteType writeType, int requiredAcks, int receivedAcks, int nbRetry) { if (cl == ConsistencyLevel.ALL) { - return RetryDecision.retry(ConsistencyLevel.QUORUM); + log(statement); } return DefaultRetryPolicy.INSTANCE.onWriteTimeout(statement, cl, writeType, requiredAcks, receivedAcks, nbRetry); } @@ -47,16 +57,36 @@ public class NotConsistencyAllRetryPolicy implements RetryPolicy { @Override public RetryDecision onUnavailable(Statement statement, ConsistencyLevel cl, int requiredReplica, int aliveReplica, int nbRetry) { if (cl == ConsistencyLevel.ALL) { - return RetryDecision.retry(ConsistencyLevel.QUORUM); + log(statement); } return DefaultRetryPolicy.INSTANCE.onUnavailable(statement, cl, requiredReplica, aliveReplica, nbRetry); } @Override public RetryDecision onRequestError(Statement statement, ConsistencyLevel cl, DriverException e, int nbRetry) { + if (cl == ConsistencyLevel.ALL) { + log(statement); + } return DefaultRetryPolicy.INSTANCE.onRequestError(statement, cl, e, nbRetry); } + private void log(Statement statement) { + Optional<String> statementAsString = asString(statement); + statementAsString.ifPresent(string -> LOGGER.warn("Consistency Level ALL used for executing {}", string)); + } + + private Optional<String> asString(Statement statement) { + if (statement instanceof PreparedStatement) { + PreparedStatement preparedStatement = (PreparedStatement) statement; + return Optional.of(preparedStatement.getQueryString()); + } + if (statement instanceof SimpleStatement) { + SimpleStatement simpleStatement = (SimpleStatement) statement; + return Optional.of(simpleStatement.getQueryString()); + } + return Optional.empty(); + } + @Override public void init(Cluster cluster) { --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org