JAMES-2287 Cassandra mailbox should depend on ObjectStore API And not on its implementations
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ea12b94b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ea12b94b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ea12b94b Branch: refs/heads/master Commit: ea12b94b50b49b3dfc8739825a60c87321fd0329 Parents: c4c370e Author: benwa <[email protected]> Authored: Thu Jan 18 11:22:15 2018 +0700 Committer: benwa <[email protected]> Committed: Fri Jan 19 09:07:28 2018 +0700 ---------------------------------------------------------------------- mailbox/cassandra/pom.xml | 5 ++++ .../CassandraMailboxSessionMapperFactory.java | 15 ++++++---- .../mail/CassandraAttachmentDAOV2.java | 11 +++---- .../mail/CassandraAttachmentMapper.java | 14 ++++----- .../cassandra/mail/CassandraMessageDAO.java | 30 ++++++++++---------- .../mail/migration/AttachmentV2Migration.java | 10 +++---- .../CassandraSubscriptionManagerTest.java | 7 ++++- ...estCassandraMailboxSessionMapperFactory.java | 11 +++---- .../mail/CassandraAttachmentDAOV2Test.java | 6 ++-- .../mail/CassandraAttachmentFallbackTest.java | 4 ++- .../cassandra/mail/CassandraMessageDAOTest.java | 5 +++- .../AttachmentMessageIdCreationTest.java | 3 +- .../migration/AttachmentV2MigrationTest.java | 22 +++++++------- mpt/impl/imap-mailbox/cassandra/pom.xml | 4 +++ 14 files changed, 87 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/pom.xml b/mailbox/cassandra/pom.xml index 0826db3..2be705b 100644 --- a/mailbox/cassandra/pom.xml +++ b/mailbox/cassandra/pom.xml @@ -64,7 +64,12 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>blob-api</artifactId> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>blob-cassandra</artifactId> + <scope>test</scope> </dependency> <dependency> <groupId>${project.groupId}</groupId> http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java index 3969700..d95d1a0 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java @@ -23,7 +23,8 @@ import javax.inject.Inject; import org.apache.james.backends.cassandra.init.CassandraConfiguration; import org.apache.james.backends.cassandra.utils.CassandraUtils; -import org.apache.james.blob.cassandra.CassandraBlobsDAO; +import org.apache.james.blob.api.BlobId; +import org.apache.james.blob.api.ObjectStore; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper; import org.apache.james.mailbox.cassandra.mail.CassandraAnnotationMapper; @@ -85,11 +86,12 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa private final CassandraAttachmentDAO attachmentDAO; private final CassandraAttachmentDAOV2 attachmentDAOV2; private final CassandraDeletedMessageDAO deletedMessageDAO; - private final CassandraBlobsDAO blobsDAO; + private final ObjectStore objectStore; private final CassandraAttachmentMessageIdDAO attachmentMessageIdDAO; private final CassandraAttachmentOwnerDAO ownerDAO; private final CassandraACLMapper aclMapper; private final CassandraUserMailboxRightsDAO userMailboxRightsDAO; + private final BlobId.Factory blobIdFactory; private final CassandraUtils cassandraUtils; private final CassandraConfiguration cassandraConfiguration; @@ -100,10 +102,10 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa CassandraMailboxCounterDAO mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentsDAO, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathDAO mailboxPathDAO, CassandraFirstUnseenDAO firstUnseenDAO, CassandraApplicableFlagDAO applicableFlagDAO, CassandraAttachmentDAO attachmentDAO, CassandraAttachmentDAOV2 attachmentDAOV2, CassandraDeletedMessageDAO deletedMessageDAO, - CassandraBlobsDAO blobsDAO, CassandraAttachmentMessageIdDAO attachmentMessageIdDAO, + ObjectStore objectStore, CassandraAttachmentMessageIdDAO attachmentMessageIdDAO, CassandraAttachmentOwnerDAO ownerDAO, CassandraACLMapper aclMapper, CassandraUserMailboxRightsDAO userMailboxRightsDAO, - CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) { + BlobId.Factory blobIdFactory, CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) { this.uidProvider = uidProvider; this.modSeqProvider = modSeqProvider; this.session = session; @@ -119,10 +121,11 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa this.attachmentDAOV2 = attachmentDAOV2; this.deletedMessageDAO = deletedMessageDAO; this.applicableFlagDAO = applicableFlagDAO; - this.blobsDAO = blobsDAO; + this.objectStore = objectStore; this.attachmentMessageIdDAO = attachmentMessageIdDAO; this.aclMapper = aclMapper; this.userMailboxRightsDAO = userMailboxRightsDAO; + this.blobIdFactory = blobIdFactory; this.cassandraUtils = cassandraUtils; this.ownerDAO = ownerDAO; this.cassandraConfiguration = cassandraConfiguration; @@ -168,7 +171,7 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa @Override public CassandraAttachmentMapper createAttachmentMapper(MailboxSession mailboxSession) { - return new CassandraAttachmentMapper(attachmentDAO, attachmentDAOV2, blobsDAO, attachmentMessageIdDAO, ownerDAO); + return new CassandraAttachmentMapper(attachmentDAO, attachmentDAOV2, objectStore, attachmentMessageIdDAO, ownerDAO); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java index 8a40ef8..f88723f 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java @@ -39,7 +39,6 @@ import javax.inject.Inject; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.blob.api.BlobId; -import org.apache.james.blob.cassandra.CassandraBlobId; import org.apache.james.mailbox.model.Attachment; import org.apache.james.mailbox.model.AttachmentId; @@ -113,20 +112,22 @@ public class CassandraAttachmentDAOV2 { attachment.getSize()); } - private static DAOAttachment fromRow(Row row) { + private static DAOAttachment fromRow(Row row, BlobId.Factory blobIfFactory) { return new DAOAttachment( AttachmentId.from(row.getString(ID)), - CassandraBlobId.from(row.getString(BLOB_ID)), + blobIfFactory.from(row.getString(BLOB_ID)), row.getString(TYPE), row.getLong(SIZE)); } + private final BlobId.Factory blobIdFactory; private final CassandraAsyncExecutor cassandraAsyncExecutor; private final PreparedStatement insertStatement; private final PreparedStatement selectStatement; @Inject - public CassandraAttachmentDAOV2(Session session) { + public CassandraAttachmentDAOV2(BlobId.Factory blobIdFactory, Session session) { + this.blobIdFactory = blobIdFactory; this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); this.selectStatement = prepareSelect(session); @@ -154,7 +155,7 @@ public class CassandraAttachmentDAOV2 { return cassandraAsyncExecutor.executeSingleRow( selectStatement.bind() .setUUID(ID_AS_UUID, attachmentId.asUUID())) - .thenApply(row -> row.map(CassandraAttachmentDAOV2::fromRow)); + .thenApply(rowOptional -> rowOptional.map(row -> CassandraAttachmentDAOV2.fromRow(row, blobIdFactory))); } public CompletableFuture<Void> storeAttachment(DAOAttachment attachment) { http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java index d9a282f..ef0294b 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java @@ -28,7 +28,7 @@ import java.util.stream.Stream; import javax.inject.Inject; -import org.apache.james.blob.cassandra.CassandraBlobsDAO; +import org.apache.james.blob.api.ObjectStore; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment; import org.apache.james.mailbox.exception.AttachmentNotFoundException; import org.apache.james.mailbox.exception.MailboxException; @@ -51,15 +51,15 @@ public class CassandraAttachmentMapper implements AttachmentMapper { private final CassandraAttachmentDAO attachmentDAO; private final CassandraAttachmentDAOV2 attachmentDAOV2; - private final CassandraBlobsDAO blobsDAO; + private final ObjectStore objectStore; private final CassandraAttachmentMessageIdDAO attachmentMessageIdDAO; private final CassandraAttachmentOwnerDAO ownerDAO; @Inject - public CassandraAttachmentMapper(CassandraAttachmentDAO attachmentDAO, CassandraAttachmentDAOV2 attachmentDAOV2, CassandraBlobsDAO blobsDAO, CassandraAttachmentMessageIdDAO attachmentMessageIdDAO, final CassandraAttachmentOwnerDAO ownerDAO) { + public CassandraAttachmentMapper(CassandraAttachmentDAO attachmentDAO, CassandraAttachmentDAOV2 attachmentDAOV2, ObjectStore objectStore, CassandraAttachmentMessageIdDAO attachmentMessageIdDAO, CassandraAttachmentOwnerDAO ownerDAO) { this.attachmentDAO = attachmentDAO; this.attachmentDAOV2 = attachmentDAOV2; - this.blobsDAO = blobsDAO; + this.objectStore = objectStore; this.attachmentMessageIdDAO = attachmentMessageIdDAO; this.ownerDAO = ownerDAO; } @@ -87,7 +87,7 @@ public class CassandraAttachmentMapper implements AttachmentMapper { return CompletableFuture.completedFuture(Optional.empty()); } DAOAttachment daoAttachment = daoAttachmentOptional.get(); - return blobsDAO.read(daoAttachment.getBlobId()) + return objectStore.read(daoAttachment.getBlobId()) .thenApply(bytes -> Optional.of(daoAttachment.toAttachment(bytes))); } @@ -126,7 +126,7 @@ public class CassandraAttachmentMapper implements AttachmentMapper { @Override public void storeAttachmentForOwner(Attachment attachment, Username owner) throws MailboxException { ownerDAO.addOwner(attachment.getAttachmentId(), owner) - .thenCompose(any -> blobsDAO.save(attachment.getBytes())) + .thenCompose(any -> objectStore.save(attachment.getBytes())) .thenApply(blobId -> CassandraAttachmentDAOV2.from(attachment, blobId)) .thenCompose(attachmentDAOV2::storeAttachment) .join(); @@ -152,7 +152,7 @@ public class CassandraAttachmentMapper implements AttachmentMapper { } public CompletableFuture<Void> storeAttachmentAsync(Attachment attachment, MessageId ownerMessageId) { - return blobsDAO.save(attachment.getBytes()) + return objectStore.save(attachment.getBytes()) .thenApply(blobId -> CassandraAttachmentDAOV2.from(attachment, blobId)) .thenCompose(daoAttachment -> storeAttachmentWithIndex(daoAttachment, ownerMessageId)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java index 72fe82e..e00ca41 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java @@ -60,8 +60,7 @@ import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.blob.api.BlobId; -import org.apache.james.blob.cassandra.CassandraBlobId; -import org.apache.james.blob.cassandra.CassandraBlobsDAO; +import org.apache.james.blob.api.ObjectStore; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.utils.Limit; import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table; @@ -103,7 +102,8 @@ public class CassandraMessageDAO { private final CassandraAsyncExecutor cassandraAsyncExecutor; private final CassandraTypesProvider typesProvider; - private final CassandraBlobsDAO blobsDAO; + private final ObjectStore objectStore; + private final BlobId.Factory blobIdFactory; private final CassandraConfiguration configuration; private final CassandraUtils cassandraUtils; private final CassandraMessageId.Factory messageIdFactory; @@ -117,11 +117,13 @@ public class CassandraMessageDAO { private final Cid.CidParser cidParser; @Inject - public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, CassandraBlobsDAO blobsDAO, CassandraConfiguration cassandraConfiguration, + public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, ObjectStore objectStore, + BlobId.Factory blobIdFactory, CassandraConfiguration cassandraConfiguration, CassandraUtils cassandraUtils, CassandraMessageId.Factory messageIdFactory) { this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); this.typesProvider = typesProvider; - this.blobsDAO = blobsDAO; + this.objectStore = objectStore; + this.blobIdFactory = blobIdFactory; this.configuration = cassandraConfiguration; this.cassandraUtils = cassandraUtils; this.messageIdFactory = messageIdFactory; @@ -137,9 +139,9 @@ public class CassandraMessageDAO { } @VisibleForTesting - public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, CassandraBlobsDAO blobsDAO, - CassandraUtils cassandraUtils, CassandraMessageId.Factory messageIdFactory) { - this(session, typesProvider, blobsDAO, CassandraConfiguration.DEFAULT_CONFIGURATION, cassandraUtils, messageIdFactory); + public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, ObjectStore objectStore, + BlobId.Factory blobIdFactory, CassandraUtils cassandraUtils, CassandraMessageId.Factory messageIdFactory) { + this(session, typesProvider, objectStore, blobIdFactory, CassandraConfiguration.DEFAULT_CONFIGURATION, cassandraUtils, messageIdFactory); } private PreparedStatement prepareSelect(Session session, String[] fields) { @@ -180,13 +182,11 @@ public class CassandraMessageDAO { private CompletableFuture<Pair<BlobId, BlobId>> saveContent(MailboxMessage message) throws MailboxException { try { + byte[] headerContent = IOUtils.toByteArray(message.getHeaderContent()); + byte[] bodyContent = IOUtils.toByteArray(message.getBodyContent()); return CompletableFutureUtil.combine( - blobsDAO.save( - IOUtils.toByteArray( - message.getHeaderContent())), - blobsDAO.save( - IOUtils.toByteArray( - message.getBodyContent())), + objectStore.save(headerContent), + objectStore.save(bodyContent), Pair::of); } catch (IOException e) { throw new MailboxException("Error saving mail content", e); @@ -372,7 +372,7 @@ public class CassandraMessageDAO { } private CompletableFuture<byte[]> getFieldContent(String field, Row row) { - return blobsDAO.read(CassandraBlobId.from(row.getString(field))); + return objectStore.read(blobIdFactory.from(row.getString(field))); } public static MessageResult notFound(ComposedMessageIdWithMetaData id) { http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java index 651b381..0e074f4 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java @@ -22,7 +22,7 @@ package org.apache.james.mailbox.cassandra.mail.migration; import javax.inject.Inject; import org.apache.james.backends.cassandra.migration.Migration; -import org.apache.james.blob.cassandra.CassandraBlobsDAO; +import org.apache.james.blob.api.ObjectStore; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2; import org.apache.james.mailbox.model.Attachment; @@ -34,15 +34,15 @@ public class AttachmentV2Migration implements Migration { private static final Logger LOGGER = LoggerFactory.getLogger(AttachmentV2Migration.class); private final CassandraAttachmentDAO attachmentDAOV1; private final CassandraAttachmentDAOV2 attachmentDAOV2; - private final CassandraBlobsDAO blobsDAO; + private final ObjectStore objectStore; @Inject public AttachmentV2Migration(CassandraAttachmentDAO attachmentDAOV1, CassandraAttachmentDAOV2 attachmentDAOV2, - CassandraBlobsDAO blobsDAO) { + ObjectStore objectStore) { this.attachmentDAOV1 = attachmentDAOV1; this.attachmentDAOV2 = attachmentDAOV2; - this.blobsDAO = blobsDAO; + this.objectStore = objectStore; } @Override @@ -59,7 +59,7 @@ public class AttachmentV2Migration implements Migration { private Result migrateAttachment(Attachment attachment) { try { - blobsDAO.save(attachment.getBytes()) + objectStore.save(attachment.getBytes()) .thenApply(blobId -> CassandraAttachmentDAOV2.from(attachment, blobId)) .thenCompose(attachmentDAOV2::storeAttachment) .thenCompose(any -> attachmentDAOV1.deleteAttachment(attachment.getAttachmentId())) http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java index c55cc11..153a859 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java @@ -24,6 +24,8 @@ import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.init.CassandraConfiguration; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.blob.api.BlobId; +import org.apache.james.blob.api.ObjectStore; import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.AbstractSubscriptionManagerTest; import org.apache.james.mailbox.SubscriptionManager; @@ -99,6 +101,8 @@ public class CassandraSubscriptionManagerTest extends AbstractSubscriptionManage CassandraAttachmentOwnerDAO ownerDAO = null; CassandraACLMapper aclMapper = null; CassandraUserMailboxRightsDAO userMailboxRightsDAO = null; + BlobId.Factory blobIdFactory = null; + ObjectStore objectStore = null; return new CassandraSubscriptionManager( new CassandraMailboxSessionMapperFactory( new CassandraUidProvider(cassandra.getConf()), @@ -116,11 +120,12 @@ public class CassandraSubscriptionManagerTest extends AbstractSubscriptionManage attachmentDAO, attachmentDAOV2, deletedMessageDAO, - cassandraBlobsDAO, + objectStore, attachmentMessageIdDAO, ownerDAO, aclMapper, userMailboxRightsDAO, + blobIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java index a6d854c..c4503b1 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra; import org.apache.james.backends.cassandra.init.CassandraConfiguration; import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.blob.cassandra.CassandraBlobId; import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper; @@ -49,11 +50,12 @@ public class TestCassandraMailboxSessionMapperFactory { public static CassandraMailboxSessionMapperFactory forTests(Session session, CassandraTypesProvider typesProvider, CassandraMessageId.Factory factory) { CassandraBlobsDAO cassandraBlobsDAO = new CassandraBlobsDAO(session); + CassandraBlobId.Factory blobIdFactory = new CassandraBlobId.Factory(); return new CassandraMailboxSessionMapperFactory( new CassandraUidProvider(session), new CassandraModSeqProvider(session), session, - new CassandraMessageDAO(session, typesProvider, cassandraBlobsDAO, CassandraUtils.WITH_DEFAULT_CONFIGURATION, factory), + new CassandraMessageDAO(session, typesProvider, cassandraBlobsDAO, blobIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION, factory), new CassandraMessageIdDAO(session, factory), new CassandraMessageIdToImapUidDAO(session, factory), new CassandraMailboxCounterDAO(session), @@ -63,16 +65,15 @@ public class TestCassandraMailboxSessionMapperFactory { new CassandraFirstUnseenDAO(session), new CassandraApplicableFlagDAO(session), new CassandraAttachmentDAO(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION), - new CassandraAttachmentDAOV2(session), + new CassandraAttachmentDAOV2(blobIdFactory, session), new CassandraDeletedMessageDAO(session), - cassandraBlobsDAO, - new CassandraAttachmentMessageIdDAO(session, factory, CassandraUtils.WITH_DEFAULT_CONFIGURATION), + cassandraBlobsDAO, new CassandraAttachmentMessageIdDAO(session, factory, CassandraUtils.WITH_DEFAULT_CONFIGURATION), new CassandraAttachmentOwnerDAO(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION), new CassandraACLMapper(session, new CassandraUserMailboxRightsDAO(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION), CassandraConfiguration.DEFAULT_CONFIGURATION), new CassandraUserMailboxRightsDAO(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION), - CassandraUtils.WITH_DEFAULT_CONFIGURATION, + blobIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION); } http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java index f5a8285..d5f7ca4 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java @@ -26,6 +26,7 @@ import java.util.Optional; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; +import org.apache.james.blob.api.BlobId; import org.apache.james.blob.cassandra.CassandraBlobId; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; @@ -38,6 +39,7 @@ import org.junit.Test; public class CassandraAttachmentDAOV2Test { public static final AttachmentId ATTACHMENT_ID = AttachmentId.from("id1"); + private static final CassandraBlobId.Factory BLOB_ID_FACTORY = new CassandraBlobId.Factory(); @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); @@ -53,7 +55,7 @@ public class CassandraAttachmentDAOV2Test { cassandraServer.getIp(), cassandraServer.getBindingPort()); - testee = new CassandraAttachmentDAOV2(cassandra.getConf()); + testee = new CassandraAttachmentDAOV2(BLOB_ID_FACTORY, cassandra.getConf()); } @After @@ -75,7 +77,7 @@ public class CassandraAttachmentDAOV2Test { .type("application/json") .bytes("{\"property\":`\"value\"}".getBytes(StandardCharsets.UTF_8)) .build(); - CassandraBlobId blobId = CassandraBlobId.from("blobId"); + BlobId blobId = BLOB_ID_FACTORY.from("blobId"); DAOAttachment daoAttachment = CassandraAttachmentDAOV2.from(attachment, blobId); testee.storeAttachment(daoAttachment).join(); http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java index 0658b1a..175c479 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java @@ -30,6 +30,7 @@ import org.apache.james.backends.cassandra.init.CassandraConfiguration; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.blob.api.BlobId; +import org.apache.james.blob.cassandra.CassandraBlobId; import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; @@ -46,6 +47,7 @@ import org.testcontainers.shaded.com.google.common.collect.ImmutableList; public class CassandraAttachmentFallbackTest { public static final AttachmentId ATTACHMENT_ID_1 = AttachmentId.from("id1"); public static final AttachmentId ATTACHMENT_ID_2 = AttachmentId.from("id2"); + private static final CassandraBlobId.Factory BLOB_ID_FACTORY = new CassandraBlobId.Factory(); @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); @@ -69,7 +71,7 @@ public class CassandraAttachmentFallbackTest { cassandraServer.getIp(), cassandraServer.getBindingPort()); - attachmentDAOV2 = new CassandraAttachmentDAOV2(cassandra.getConf()); + attachmentDAOV2 = new CassandraAttachmentDAOV2(BLOB_ID_FACTORY, cassandra.getConf()); attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION); http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java index eee499f..f9d3f45 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java @@ -38,6 +38,7 @@ import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.blob.cassandra.CassandraBlobId; import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.MessageUid; @@ -89,7 +90,9 @@ public class CassandraMessageDAOTest { messageIdFactory = new CassandraMessageId.Factory(); messageId = messageIdFactory.generate(); CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); - testee = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), blobsDAO, CassandraUtils.WITH_DEFAULT_CONFIGURATION, new CassandraMessageId.Factory()); + CassandraBlobId.Factory blobIdFactory = new CassandraBlobId.Factory(); + testee = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), blobsDAO, blobIdFactory, + CassandraUtils.WITH_DEFAULT_CONFIGURATION, new CassandraMessageId.Factory()); messageIds = ImmutableList.of(ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(MAILBOX_ID, messageId, messageUid)) http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java index 67d5b1e..1a491fd 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentMessageIdCreationTest.java @@ -39,6 +39,7 @@ import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.backends.cassandra.migration.Migration; import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.blob.cassandra.CassandraBlobId; import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.MessageUid; @@ -87,7 +88,7 @@ public class AttachmentMessageIdCreationTest { blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); cassandraMessageDAO = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), - blobsDAO, CassandraUtils.WITH_DEFAULT_CONFIGURATION, messageIdFactory); + blobsDAO, new CassandraBlobId.Factory(), CassandraUtils.WITH_DEFAULT_CONFIGURATION, messageIdFactory); attachmentMessageIdDAO = new CassandraAttachmentMessageIdDAO(cassandra.getConf(), new CassandraMessageId.Factory(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java index 70792a8..68d53a6 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java @@ -49,6 +49,7 @@ import org.junit.Test; public class AttachmentV2MigrationTest { public static final AttachmentId ATTACHMENT_ID = AttachmentId.from("id1"); public static final AttachmentId ATTACHMENT_ID_2 = AttachmentId.from("id2"); + private static final CassandraBlobId.Factory BLOB_ID_FACTORY = new CassandraBlobId.Factory(); @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); @@ -72,9 +73,8 @@ public class AttachmentV2MigrationTest { attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION); - attachmentDAOV2 = new CassandraAttachmentDAOV2(cassandra.getConf()); + attachmentDAOV2 = new CassandraAttachmentDAOV2(BLOB_ID_FACTORY, cassandra.getConf()); blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); - migration = new AttachmentV2Migration(attachmentDAO, attachmentDAOV2, blobsDAO); attachment1 = Attachment.builder() @@ -112,12 +112,12 @@ public class AttachmentV2MigrationTest { migration.run(); assertThat(attachmentDAOV2.getAttachment(ATTACHMENT_ID).join()) - .contains(CassandraAttachmentDAOV2.from(attachment1, CassandraBlobId.forPayload(attachment1.getBytes()))); + .contains(CassandraAttachmentDAOV2.from(attachment1, BLOB_ID_FACTORY.forPayload(attachment1.getBytes()))); assertThat(attachmentDAOV2.getAttachment(ATTACHMENT_ID_2).join()) - .contains(CassandraAttachmentDAOV2.from(attachment2, CassandraBlobId.forPayload(attachment2.getBytes()))); - assertThat(blobsDAO.read(CassandraBlobId.forPayload(attachment1.getBytes())).join()) + .contains(CassandraAttachmentDAOV2.from(attachment2, BLOB_ID_FACTORY.forPayload(attachment2.getBytes()))); + assertThat(blobsDAO.read(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())).join()) .isEqualTo(attachment1.getBytes()); - assertThat(blobsDAO.read(CassandraBlobId.forPayload(attachment2.getBytes())).join()) + assertThat(blobsDAO.read(BLOB_ID_FACTORY.forPayload(attachment2.getBytes())).join()) .isEqualTo(attachment2.getBytes()); } @@ -172,9 +172,9 @@ public class AttachmentV2MigrationTest { attachment1, attachment2)); when(blobsDAO.save(attachment1.getBytes())) - .thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment1.getBytes()))); + .thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment1.getBytes()))); when(blobsDAO.save(attachment2.getBytes())) - .thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment2.getBytes()))); + .thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment2.getBytes()))); when(attachmentDAOV2.storeAttachment(any())).thenThrow(new RuntimeException()); assertThat(migration.run()).isEqualTo(Migration.Result.PARTIAL); @@ -191,9 +191,9 @@ public class AttachmentV2MigrationTest { attachment1, attachment2)); when(blobsDAO.save(attachment1.getBytes())) - .thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment1.getBytes()))); + .thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment1.getBytes()))); when(blobsDAO.save(attachment2.getBytes())) - .thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment2.getBytes()))); + .thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment2.getBytes()))); when(attachmentDAOV2.storeAttachment(any())).thenReturn(CompletableFuture.completedFuture(null)); when(attachmentDAO.deleteAttachment(any())).thenThrow(new RuntimeException()); @@ -211,7 +211,7 @@ public class AttachmentV2MigrationTest { attachment1, attachment2)); when(blobsDAO.save(attachment1.getBytes())) - .thenReturn(CompletableFuture.completedFuture(CassandraBlobId.forPayload(attachment1.getBytes()))); + .thenReturn(CompletableFuture.completedFuture(BLOB_ID_FACTORY.forPayload(attachment1.getBytes()))); when(blobsDAO.save(attachment2.getBytes())) .thenThrow(new RuntimeException()); when(attachmentDAOV2.storeAttachment(any())).thenReturn(CompletableFuture.completedFuture(null)); http://git-wip-us.apache.org/repos/asf/james-project/blob/ea12b94b/mpt/impl/imap-mailbox/cassandra/pom.xml ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/cassandra/pom.xml b/mpt/impl/imap-mailbox/cassandra/pom.xml index bec05c3..2c325cd 100644 --- a/mpt/impl/imap-mailbox/cassandra/pom.xml +++ b/mpt/impl/imap-mailbox/cassandra/pom.xml @@ -55,5 +55,9 @@ <groupId>${project.groupId}</groupId> <artifactId>apache-james-mpt-imapmailbox-core</artifactId> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>blob-cassandra</artifactId> + </dependency> </dependencies> </project> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
