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 0afb84f2e8909346e76aca6d138168d1dcb0c153
Author: Benoit Tellier <[email protected]>
AuthorDate: Wed Feb 5 09:22:17 2020 +0700

    JAMES-2990 Reduce consistency level: 
CassandraMessageFastViewProjection::store
    
    Rationals: An outdated projection is very well handled on the read path so
    inconsistencies are acceptable.
    
    We have been noticing failed writes (partial quorum writes) and relying on
    Cassandra consistency mechanisms for this (hinted handoff, etc...) seems 
like
    an acceptable solution.
---
 .../projections/CassandraMessageFastViewProjection.java  | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
index 628a3b6..21352c8 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
@@ -39,7 +39,10 @@ import 
org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.metrics.api.MetricFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import com.datastax.driver.core.ConsistencyLevel;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
@@ -50,6 +53,7 @@ import reactor.core.publisher.Mono;
 
 public class CassandraMessageFastViewProjection implements 
MessageFastViewProjection {
 
+    public static final Logger LOGGER = 
LoggerFactory.getLogger(CassandraMessageFastViewProjection.class);
     private final Metric metricRetrieveHitCount;
     private final Metric metricRetrieveMissCount;
 
@@ -90,7 +94,8 @@ public class CassandraMessageFastViewProjection implements 
MessageFastViewProjec
         return cassandraAsyncExecutor.executeVoid(storeStatement.bind()
             .setUUID(MESSAGE_ID, ((CassandraMessageId) messageId).get())
             .setString(PREVIEW, precomputedProperties.getPreview().getValue())
-            .setBool(HAS_ATTACHMENT, precomputedProperties.hasAttachment()));
+            .setBool(HAS_ATTACHMENT, precomputedProperties.hasAttachment())
+            .setConsistencyLevel(ConsistencyLevel.ONE));
     }
 
     @Override
@@ -98,10 +103,15 @@ public class CassandraMessageFastViewProjection implements 
MessageFastViewProjec
         checkMessage(messageId);
 
         return cassandraAsyncExecutor.executeSingleRow(retrieveStatement.bind()
-                .setUUID(MESSAGE_ID, ((CassandraMessageId) messageId).get()))
+                .setUUID(MESSAGE_ID, ((CassandraMessageId) messageId).get())
+                .setConsistencyLevel(ConsistencyLevel.ONE))
             .map(this::fromRow)
             .doOnNext(preview -> metricRetrieveHitCount.increment())
-            
.switchIfEmpty(Mono.fromRunnable(metricRetrieveMissCount::increment));
+            
.switchIfEmpty(Mono.fromRunnable(metricRetrieveMissCount::increment))
+            .onErrorResume(e -> {
+                LOGGER.error("Error while retrieving MessageFastView 
projection item for {}", messageId, e);
+                return Mono.empty();
+            });
     }
 
     @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to