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 da36e40406a4a86730b126a54aa9f9fc9a5313d5 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Wed Apr 29 15:13:21 2020 +0700 JAMES-3140 CassandraBlobStoreCache should not propagate failure upon inserts --- .../blob/cassandra/cache/CassandraBlobStoreCache.java | 10 +++++++++- .../cassandra/cache/CassandraBlobStoreCacheTest.java | 18 ++++++++++++++++++ 2 files changed, 27 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 fe6217e..32f5d62 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 @@ -38,6 +38,8 @@ import javax.inject.Inject; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.blob.api.BlobId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; @@ -48,6 +50,8 @@ import reactor.core.publisher.Mono; public class CassandraBlobStoreCache implements BlobStoreCache { + public static final Logger LOGGER = LoggerFactory.getLogger(CassandraBlobStoreCache.class); + private final CassandraAsyncExecutor cassandraAsyncExecutor; private final PreparedStatement insertStatement; private final PreparedStatement selectStatement; @@ -99,7 +103,11 @@ public class CassandraBlobStoreCache implements BlobStoreCache { .setString(ID, blobId.asString()) .setBytes(DATA, data) .setInt(TTL_FOR_ROW, timeToLive) - .setConsistencyLevel(ONE)); + .setConsistencyLevel(ONE)) + .onErrorResume(e -> { + LOGGER.warn("Failed saving {} in blob store cache", blobId, e); + return Mono.empty(); + }); } private ByteBuffer toByteBuffer(byte[] bytes) { diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCacheTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCacheTest.java index efdc705..10c1feb 100644 --- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCacheTest.java +++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCacheTest.java @@ -18,15 +18,21 @@ ****************************************************************/ package org.apache.james.blob.cassandra.cache; +import static org.apache.james.backends.cassandra.Scenario.Builder.fail; +import static org.assertj.core.api.Assertions.assertThatCode; + import java.time.Duration; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.CassandraClusterExtension; import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.HashBlobId; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; +import reactor.core.publisher.Mono; + public class CassandraBlobStoreCacheTest implements BlobStoreCacheContract { @RegisterExtension @@ -59,4 +65,16 @@ public class CassandraBlobStoreCacheTest implements BlobStoreCacheContract { public BlobId.Factory blobIdFactory() { return blobIdFactory; } + + @Test + void cacheShouldNotPropagateFailures(CassandraCluster cassandra) { + cassandra.getConf().registerScenario(fail() + .forever() + .whenQueryStartsWith("INSERT INTO blob_cache (id,data) VALUES (:id,:data) USING TTL :ttl;")); + + BlobId blobId = blobIdFactory().randomId(); + + assertThatCode(() -> Mono.from(testee.cache(blobId, EIGHT_KILOBYTES)).block()) + .doesNotThrowAnyException(); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org