MAILBOX-267 Don't fail on single index update failure for message update

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/09c9d34c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/09c9d34c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/09c9d34c

Branch: refs/heads/master
Commit: 09c9d34c65172d6e5ceefd34d59f37d3785b1167
Parents: 75cdccc
Author: benwa <[email protected]>
Authored: Wed May 24 16:05:58 2017 +0700
Committer: benwa <[email protected]>
Committed: Mon May 29 17:02:50 2017 +0700

----------------------------------------------------------------------
 .../james/mailbox/cassandra/mail/CassandraMessageMapper.java | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/09c9d34c/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
----------------------------------------------------------------------
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 68133eb..8d00e77 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
@@ -57,6 +57,7 @@ import org.apache.james.util.streams.JamesCollectors;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 
@@ -329,7 +330,12 @@ public class CassandraMessageMapper implements 
MessageMapper {
     private CompletableFuture<FlagsUpdateStageResult> 
updateIndexesForUpdatesResult(CassandraId mailboxId, FlagsUpdateStageResult 
result) {
         return FluentFutureStream.of(
             result.getSucceeded().stream()
-                .map((UpdatedFlags updatedFlags) -> 
indexTableHandler.updateIndexOnFlagsUpdate(mailboxId, updatedFlags)))
+                .map(Throwing
+                    .function((UpdatedFlags updatedFlags) -> 
indexTableHandler.updateIndexOnFlagsUpdate(mailboxId, updatedFlags))
+                    .fallbackTo(failedindex -> {
+                        LOGGER.error("Could not update flag indexes for 
mailboxId {} UID {}. This will lead to inconsistencies across Cassandra 
tables");
+                        return CompletableFuture.completedFuture(null);
+                    })))
             .completableFuture()
             .thenApply(any -> result);
     }


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

Reply via email to