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 rc...@apache.org on 2020/07/28 03:20:50 UTC

[james-project] 22/25: JAMES-3319 Actual blob deletion for CassandraMailRepository

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 74311ada30ab2d93e777c2dc3b0b0100e3b6aa55
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Jul 24 13:28:24 2020 +0700

    JAMES-3319 Actual blob deletion for CassandraMailRepository
---
 .../cassandra/CassandraMailRepository.java         | 23 ++++++++++++++++++----
 .../cassandra/CassandraMailRepositoryTest.java     |  5 ++---
 ...aMailRepositoryWithFakeImplementationsTest.java |  2 +-
 3 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
index f2b5168..a0b1805 100644
--- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
@@ -23,11 +23,13 @@ import static org.apache.james.util.ReactorUtils.publishIfPresent;
 
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.Optional;
 
 import javax.inject.Inject;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
+import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.api.Store;
 import org.apache.james.blob.mail.MimeMessagePartsId;
 import org.apache.james.blob.mail.MimeMessageStore;
@@ -46,16 +48,18 @@ public class CassandraMailRepository implements MailRepository {
     private final CassandraMailRepositoryCountDAO countDAO;
     private final CassandraMailRepositoryMailDaoAPI mailDAO;
     private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore;
+    private final BlobStore blobStore;
 
     @Inject
     CassandraMailRepository(MailRepositoryUrl url, CassandraMailRepositoryKeysDAO keysDAO,
                             CassandraMailRepositoryCountDAO countDAO, CassandraMailRepositoryMailDaoAPI mailDAO,
-                            MimeMessageStore.Factory mimeMessageStoreFactory) {
+                            MimeMessageStore.Factory mimeMessageStoreFactory, BlobStore blobStore) {
         this.url = url;
         this.keysDAO = keysDAO;
         this.countDAO = countDAO;
         this.mailDAO = mailDAO;
         this.mimeMessageStore = mimeMessageStoreFactory.mimeMessageStore();
+        this.blobStore = blobStore;
     }
 
     @Override
@@ -127,9 +131,20 @@ public class CassandraMailRepository implements MailRepository {
     }
 
     private Mono<Void> removeAsync(MailKey key) {
-        return keysDAO.remove(url, key)
-            .flatMap(this::decreaseSizeIfDeleted)
-            .then(mailDAO.remove(url, key));
+        return mailDAO.read(url, key)
+            .flatMap(maybeMailDTO ->
+                keysDAO.remove(url, key)
+                    .flatMap(this::decreaseSizeIfDeleted)
+                    .then(mailDAO.remove(url, key))
+                    .then(deleteBlobs(maybeMailDTO)));
+    }
+
+    private Mono<Void> deleteBlobs(Optional<MailDTO> maybeMailDTO) {
+        return Mono.justOrEmpty(maybeMailDTO)
+            .flatMap(mailDTO -> Flux.merge(
+                    blobStore.delete(blobStore.getDefaultBucketName(), mailDTO.getHeaderBlobId()),
+                    blobStore.delete(blobStore.getDefaultBucketName(), mailDTO.getBodyBlobId()))
+                .then());
     }
 
     private Mono<Void> decreaseSizeIfDeleted(Boolean isDeleted) {
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
index 6d6e443..009b9a7 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
@@ -70,7 +70,7 @@ class CassandraMailRepositoryTest {
                 .passthrough();
 
             cassandraMailRepository = new CassandraMailRepository(URL,
-                keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore));
+                keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore), blobStore);
         }
 
         @Override
@@ -84,7 +84,6 @@ class CassandraMailRepositoryTest {
         public void sizeShouldBeIncrementedByOneWhenDuplicates() {
         }
 
-        @Disabled("Failing")
         @Test
         void removeShouldDeleteStoredBlobs(CassandraCluster cassandra) throws Exception {
             MailRepository testee = retrieveRepository();
@@ -111,7 +110,7 @@ class CassandraMailRepositoryTest {
                 .deduplication();
 
             cassandraMailRepository = new CassandraMailRepository(URL,
-                keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore));
+                keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore), blobStore);
         }
 
         @Override
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
index a420ac5..8bc6d06 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
@@ -70,7 +70,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
             .passthrough();
 
         cassandraMailRepository = new CassandraMailRepository(URL,
-            keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore));
+            keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore), blobStore);
     }
 
     @Nested


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