You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2020/11/04 02:16:59 UTC
[james-project] 07/09: JAMES-3433 CachedBlobStore should only
delete data when underlying backend did delete it too
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 <bt...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org