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 f813e60d10d90b417656eafac4ef98783ac4dc72 Author: Benoit Tellier <[email protected]> AuthorDate: Tue Nov 3 11:02:25 2020 +0700 JAMES-3433 CachedBlobStore should only delete data when underlying backend did delete it too --- .../src/main/java/org/apache/james/blob/api/BlobStore.java | 2 +- .../java/org/apache/james/blob/api/MetricableBlobStore.java | 2 +- .../apache/james/blob/cassandra/cache/CachedBlobStore.java | 13 ++++++++----- .../src/main/java/org/apache/james/blob/api/Store.java | 3 ++- .../server/blob/deduplication/DeDuplicationBlobStore.scala | 4 ++-- .../server/blob/deduplication/PassThroughBlobStore.scala | 5 +++-- .../org/apache/james/webadmin/service/ExportService.java | 3 ++- 7 files changed, 19 insertions(+), 13 deletions(-) diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java index dc4abef..faf45ad 100644 --- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java +++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java @@ -55,5 +55,5 @@ public interface BlobStore { Publisher<Void> deleteBucket(BucketName bucketName); - Publisher<Void> delete(BucketName bucketName, BlobId blobId); + Publisher<Boolean> delete(BucketName bucketName, BlobId blobId); } diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java index faea69d..bc13d6e 100644 --- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java +++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java @@ -91,7 +91,7 @@ public class MetricableBlobStore implements BlobStore { } @Override - public Publisher<Void> delete(BucketName bucketName, BlobId blobId) { + public Publisher<Boolean> delete(BucketName bucketName, BlobId blobId) { return metricFactory.decoratePublisherWithTimerMetric(DELETE_TIMER_NAME, blobStoreImpl.delete(bucketName, blobId)); } diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CachedBlobStore.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CachedBlobStore.java index 87fdfa5..a5611d5 100644 --- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CachedBlobStore.java +++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CachedBlobStore.java @@ -216,12 +216,15 @@ public class CachedBlobStore implements BlobStore { } @Override - public Mono<Void> delete(BucketName bucketName, BlobId blobId) { + public Mono<Boolean> delete(BucketName bucketName, BlobId blobId) { return Mono.from(backend.delete(bucketName, blobId)) - .then(Mono.just(bucketName) - .filter(backend.getDefaultBucketName()::equals) - .flatMap(ignored -> Mono.from(cache.remove(blobId))) - .then()); + .flatMap(deleted -> { + if (backend.getDefaultBucketName().equals(bucketName) + && deleted) { + return Mono.from(cache.remove(blobId)).thenReturn(deleted); + } + return Mono.just(deleted); + }); } @Override diff --git a/server/blob/blob-common/src/main/java/org/apache/james/blob/api/Store.java b/server/blob/blob-common/src/main/java/org/apache/james/blob/api/Store.java index 9c20cba..89295d9 100644 --- a/server/blob/blob-common/src/main/java/org/apache/james/blob/api/Store.java +++ b/server/blob/blob-common/src/main/java/org/apache/james/blob/api/Store.java @@ -108,7 +108,8 @@ public interface Store<T, I> { @Override public Publisher<Void> delete(I blobIds) { return Flux.fromIterable(blobIds.asMap().values()) - .flatMap(id -> blobStore.delete(blobStore.getDefaultBucketName(), id)); + .flatMap(id -> blobStore.delete(blobStore.getDefaultBucketName(), id)) + .then(); } } } diff --git a/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/DeDuplicationBlobStore.scala b/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/DeDuplicationBlobStore.scala index 15c8c90..6cab727 100644 --- a/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/DeDuplicationBlobStore.scala +++ b/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/DeDuplicationBlobStore.scala @@ -91,10 +91,10 @@ class DeDuplicationBlobStore @Inject()(blobStoreDAO: BlobStoreDAO, blobStoreDAO.deleteBucket(bucketName) } - override def delete(bucketName: BucketName, blobId: BlobId): Publisher[Void] = { + override def delete(bucketName: BucketName, blobId: BlobId): Publisher[java.lang.Boolean] = { Preconditions.checkNotNull(bucketName) Preconditions.checkNotNull(blobId) - SMono.empty + SMono.just(Boolean.box(false)) } } diff --git a/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala b/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala index 406df50..e7e5020 100644 --- a/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala +++ b/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala @@ -69,10 +69,11 @@ class PassThroughBlobStore @Inject()(blobStoreDAO: BlobStoreDAO, blobStoreDAO.deleteBucket(bucketName) } - override def delete(bucketName: BucketName, blobId: BlobId): Publisher[Void] = { + override def delete(bucketName: BucketName, blobId: BlobId): Publisher[java.lang.Boolean] = { Preconditions.checkNotNull(bucketName) Preconditions.checkNotNull(blobId) - blobStoreDAO.delete(bucketName, blobId) + SMono.fromPublisher(blobStoreDAO.delete(bucketName, blobId)) + .`then`(SMono.just(Boolean.box(true))) } } diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExportService.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExportService.java index a982fd9..2e8e2ed 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExportService.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExportService.java @@ -139,7 +139,8 @@ public class ExportService { .onErrorResume(e -> { LOGGER.error("Error deleting Blob with blobId: {}", blobId.asString(), e); return Mono.empty(); - }); + }) + .then(); } private Mono<Void> writeUserMailboxesContent(Username username, PipedOutputStream out) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
