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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
