You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/06/25 06:50:48 UTC

[james-project] 04/04: JAMES-3170 CassandraBlobStoreCache should not propagate failures

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 5bfcbe090c41b37ff3d1f109982d895fce0b953e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jun 23 11:33:11 2020 +0700

    JAMES-3170 CassandraBlobStoreCache should not propagate failures
---
 .../blob/cassandra/cache/CassandraBlobStoreCache.java     |  6 +++++-
 .../james/blob/cassandra/cache/CachedBlobStoreTest.java   | 15 +++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
index 5584a6c..fe912bb 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
@@ -87,7 +87,11 @@ public class CassandraBlobStoreCache implements BlobStoreCache {
                     .setString(ID, blobId.asString())
                     .setConsistencyLevel(ONE)
                     .setReadTimeoutMillis(readTimeOutFromDataBase))
-            .map(this::toByteArray);
+            .map(this::toByteArray)
+            .onErrorResume(e -> {
+                LOGGER.warn("Fail reading blob store cache", e);
+                return Mono.empty();
+            });
     }
 
     @Override
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
index 1d2abcd..c8c66a0 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.blob.cassandra.cache;
 
+import static org.apache.james.backends.cassandra.Scenario.Builder.fail;
 import static org.apache.james.blob.api.BlobStore.StoragePolicy.HIGH_PERFORMANCE;
 import static org.apache.james.blob.api.BlobStore.StoragePolicy.LOW_COST;
 import static org.apache.james.blob.api.BlobStore.StoragePolicy.SIZE_BASED;
@@ -282,6 +283,20 @@ public class CachedBlobStoreTest implements BlobStoreContract {
         });
     }
 
+    @Test
+    public void readShouldNotPropagateFailures(CassandraCluster cassandra) {
+        BlobId blobId = Mono.from(testee.save(DEFAULT_BUCKETNAME, APPROXIMATELY_FIVE_KILOBYTES, SIZE_BASED)).block();
+
+        cassandra.getConf().registerScenario(fail()
+            .times(1)
+            .whenQueryStartsWith("SELECT * FROM blob_cache WHERE id=:id"));
+
+        Mono.from(cache.read(blobId)).block();
+
+        assertThat(testee().read(DEFAULT_BUCKETNAME, blobId))
+            .hasSameContentAs(new ByteArrayInputStream(APPROXIMATELY_FIVE_KILOBYTES));
+    }
+
     @Nested
     class MetricsTest {
         @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org