JAMES-2287 Cassandra ObjectStore implementation
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4e8bcc66 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4e8bcc66 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4e8bcc66 Branch: refs/heads/master Commit: 4e8bcc66db98fa52328efbc4d5e070140702f1d5 Parents: 12074ca Author: Antoine Duprat <[email protected]> Authored: Tue Jan 16 13:09:53 2018 +0100 Committer: benwa <[email protected]> Committed: Fri Jan 19 09:07:27 2018 +0700 ---------------------------------------------------------------------- mailbox/cassandra/pom.xml | 26 ++- .../CassandraMailboxSessionMapperFactory.java | 2 +- .../mail/CassandraAttachmentDAOV2.java | 9 +- .../mail/CassandraAttachmentMapper.java | 1 + .../cassandra/mail/CassandraBlobsDAO.java | 208 ------------------ .../cassandra/mail/CassandraMessageDAO.java | 6 +- .../mail/migration/AttachmentV2Migration.java | 2 +- .../cassandra/mail/utils/DataChunker.java | 52 ----- .../cassandra/modules/CassandraBlobModule.java | 69 ------ .../mailbox/cassandra/table/BlobTable.java | 32 --- .../CassandraCombinationManagerTest.java | 2 +- .../CassandraMailboxManagerStressTest.java | 2 +- .../cassandra/CassandraMailboxManagerTest.java | 2 +- .../CassandraMessageIdManagerQuotaTest.java | 2 +- ...CassandraMessageIdManagerSideEffectTest.java | 2 +- .../CassandraMessageIdManagerStorageTest.java | 2 +- .../CassandraSubscriptionManagerTest.java | 2 +- ...estCassandraMailboxSessionMapperFactory.java | 2 +- .../mail/CassandraAnnotationMapperTest.java | 2 +- .../mail/CassandraAttachmentFallbackTest.java | 11 +- .../mail/CassandraAttachmentMapperTest.java | 2 +- .../cassandra/mail/CassandraBlobsDAOTest.java | 132 ------------ .../mail/CassandraGenericMailboxMapperTest.java | 2 +- .../CassandraMailboxManagerAttachmentTest.java | 2 +- .../mail/CassandraMailboxMapperAclTest.java | 2 +- .../cassandra/mail/CassandraMessageDAOTest.java | 3 +- .../mail/CassandraMessageIdMapperTest.java | 2 +- .../mail/CassandraMessageMapperTest.java | 2 +- .../mail/CassandraMessageMoveTest.java | 2 +- ...assandraMessageWithAttachmentMapperTest.java | 2 +- .../AttachmentMessageIdCreationTest.java | 4 +- .../migration/AttachmentV2MigrationTest.java | 4 +- .../cassandra/mail/utils/DataChunkerTest.java | 117 ----------- .../cassandra/host/CassandraHostSystem.java | 2 +- server/blob/blob-cassandra/pom.xml | 20 ++ .../apache/james/blob/cassandra/BlobTable.java | 32 +++ .../blob/cassandra/CassandraBlobModule.java | 68 ++++++ .../james/blob/cassandra/CassandraBlobsDAO.java | 210 +++++++++++++++++++ .../james/blob/cassandra/utils/DataChunker.java | 52 +++++ .../blob/cassandra/CassandraBlobsDAOTest.java | 86 ++++++++ .../blob/cassandra/utils/DataChunkerTest.java | 110 ++++++++++ .../modules/mailbox/CassandraMailboxModule.java | 4 +- 42 files changed, 643 insertions(+), 653 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/pom.xml b/mailbox/cassandra/pom.xml index 4377f83..0826db3 100644 --- a/mailbox/cassandra/pom.xml +++ b/mailbox/cassandra/pom.xml @@ -68,6 +68,12 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>james-server-data-api</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>james-server-task</artifactId> </dependency> <dependency> @@ -106,11 +112,6 @@ <artifactId>javax.inject</artifactId> </dependency> <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - </dependency> - <dependency> <groupId>net.javacrumbs.json-unit</groupId> <artifactId>json-unit</artifactId> <version>1.5.5</version> @@ -142,6 +143,21 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-launcher</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.vintage</groupId> + <artifactId>junit-vintage-engine</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 47b8bf1..3969700 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,6 +23,7 @@ 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.mailbox.MailboxSession; import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper; import org.apache.james.mailbox.cassandra.mail.CassandraAnnotationMapper; @@ -32,7 +33,6 @@ import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMapper; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMessageIdDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentOwnerDAO; -import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO; import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO; import org.apache.james.mailbox.cassandra.mail.CassandraIndexTableHandler; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 5a9727a..8a40ef8 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 @@ -38,6 +38,7 @@ import java.util.concurrent.CompletableFuture; 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; @@ -50,11 +51,11 @@ import com.google.common.base.Preconditions; public class CassandraAttachmentDAOV2 { public static class DAOAttachment { private final AttachmentId attachmentId; - private final CassandraBlobId blobId; + private final BlobId blobId; private final String type; private final long size; - private DAOAttachment(AttachmentId attachmentId, CassandraBlobId blobId, String type, long size) { + private DAOAttachment(AttachmentId attachmentId, BlobId blobId, String type, long size) { this.attachmentId = attachmentId; this.blobId = blobId; this.type = type; @@ -65,7 +66,7 @@ public class CassandraAttachmentDAOV2 { return attachmentId; } - public CassandraBlobId getBlobId() { + public BlobId getBlobId() { return blobId; } @@ -104,7 +105,7 @@ public class CassandraAttachmentDAOV2 { } } - public static DAOAttachment from(Attachment attachment, CassandraBlobId blobId) { + public static DAOAttachment from(Attachment attachment, BlobId blobId) { return new DAOAttachment( attachment.getAttachmentId(), blobId, http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 1eccb88..d9a282f 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,6 +28,7 @@ import java.util.stream.Stream; import javax.inject.Inject; +import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment; import org.apache.james.mailbox.exception.AttachmentNotFoundException; import org.apache.james.mailbox.exception.MailboxException; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAO.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAO.java deleted file mode 100644 index 5fc09aa..0000000 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAO.java +++ /dev/null @@ -1,208 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.cassandra.mail; - -import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; -import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; -import static com.datastax.driver.core.querybuilder.QueryBuilder.select; - -import java.nio.ByteBuffer; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import javax.inject.Inject; - -import org.apache.commons.lang3.tuple.Pair; -import org.apache.james.backends.cassandra.init.CassandraConfiguration; -import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; -import org.apache.james.blob.cassandra.CassandraBlobId; -import org.apache.james.mailbox.cassandra.mail.utils.DataChunker; -import org.apache.james.mailbox.cassandra.table.BlobTable; -import org.apache.james.mailbox.cassandra.table.BlobTable.BlobParts; -import org.apache.james.util.FluentFutureStream; -import org.apache.james.util.OptionalUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.datastax.driver.core.PreparedStatement; -import com.datastax.driver.core.Row; -import com.datastax.driver.core.Session; -import com.github.steveash.guavate.Guavate; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; -import com.google.common.primitives.Bytes; - -public class CassandraBlobsDAO { - private static final Logger LOGGER = LoggerFactory.getLogger(CassandraBlobsDAO.class); - private final CassandraAsyncExecutor cassandraAsyncExecutor; - private final PreparedStatement insert; - private final PreparedStatement insertPart; - private final PreparedStatement select; - private final PreparedStatement selectPart; - private final DataChunker dataChunker; - private final CassandraConfiguration configuration; - - @Inject - public CassandraBlobsDAO(Session session, CassandraConfiguration cassandraConfiguration) { - this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); - this.configuration = cassandraConfiguration; - this.dataChunker = new DataChunker(); - this.insert = prepareInsert(session); - this.select = prepareSelect(session); - - this.insertPart = prepareInsertPart(session); - this.selectPart = prepareSelectPart(session); - } - - @VisibleForTesting - public CassandraBlobsDAO(Session session) { - this(session, CassandraConfiguration.DEFAULT_CONFIGURATION); - } - - private PreparedStatement prepareSelect(Session session) { - return session.prepare(select() - .from(BlobTable.TABLE_NAME) - .where(eq(BlobTable.ID, bindMarker(BlobTable.ID)))); - } - - private PreparedStatement prepareSelectPart(Session session) { - return session.prepare(select() - .from(BlobParts.TABLE_NAME) - .where(eq(BlobTable.ID, bindMarker(BlobTable.ID))) - .and(eq(BlobParts.CHUNK_NUMBER, bindMarker(BlobParts.CHUNK_NUMBER)))); - } - - private PreparedStatement prepareInsert(Session session) { - return session.prepare(insertInto(BlobTable.TABLE_NAME) - .value(BlobTable.ID, bindMarker(BlobTable.ID)) - .value(BlobTable.NUMBER_OF_CHUNK, bindMarker(BlobTable.NUMBER_OF_CHUNK))); - } - - private PreparedStatement prepareInsertPart(Session session) { - return session.prepare(insertInto(BlobParts.TABLE_NAME) - .value(BlobTable.ID, bindMarker(BlobTable.ID)) - .value(BlobParts.CHUNK_NUMBER, bindMarker(BlobParts.CHUNK_NUMBER)) - .value(BlobParts.DATA, bindMarker(BlobParts.DATA))); - } - - public CompletableFuture<CassandraBlobId> save(byte[] data) { - Preconditions.checkNotNull(data); - - CassandraBlobId blobId = CassandraBlobId.forPayload(data); - return saveBlobParts(data, blobId) - .thenCompose(numberOfChunk -> saveBlobPartsReferences(blobId, numberOfChunk)) - .thenApply(any -> blobId); - } - - private CompletableFuture<Integer> saveBlobParts(byte[] data, CassandraBlobId blobId) { - return FluentFutureStream.of( - dataChunker.chunk(data, configuration.getBlobPartSize()) - .map(pair -> writePart(pair.getRight(), blobId, pair.getKey()) - .thenApply(partId -> Pair.of(pair.getKey(), partId)))) - .completableFuture() - .thenApply(stream -> - getLastOfStream(stream) - .map(numOfChunkAndPartId -> numOfChunkAndPartId.getLeft() + 1) - .orElse(0)); - } - - private static <T> Optional<T> getLastOfStream(Stream<T> stream) { - return stream.reduce((first, second) -> second); - } - - private CompletableFuture<Void> writePart(ByteBuffer data, CassandraBlobId blobId, int position) { - return cassandraAsyncExecutor.executeVoid( - insertPart.bind() - .setString(BlobTable.ID, blobId.asString()) - .setInt(BlobParts.CHUNK_NUMBER, position) - .setBytes(BlobParts.DATA, data)); - } - - private CompletableFuture<Void> saveBlobPartsReferences(CassandraBlobId blobId, int numberOfChunk) { - return cassandraAsyncExecutor.executeVoid(insert.bind() - .setString(BlobTable.ID, blobId.asString()) - .setInt(BlobTable.NUMBER_OF_CHUNK, numberOfChunk)); - } - - public CompletableFuture<byte[]> read(CassandraBlobId blobId) { - return cassandraAsyncExecutor.executeSingleRow( - select.bind() - .setString(BlobTable.ID, blobId.asString())) - .thenCompose(row -> toDataParts(row, blobId)) - .thenApply(this::concatenateDataParts); - } - - private CompletableFuture<Stream<BlobPart>> toDataParts(Optional<Row> blobRowOptional, CassandraBlobId blobId) { - return blobRowOptional.map(blobRow -> { - int numOfChunk = blobRow.getInt(BlobTable.NUMBER_OF_CHUNK); - return FluentFutureStream.of( - IntStream.range(0, numOfChunk) - .mapToObj(position -> readPart(blobId, position))) - .completableFuture(); - }).orElseGet(() -> { - LOGGER.warn("Could not retrieve blob metadata for {}", blobId); - return CompletableFuture.completedFuture(Stream.empty()); - }); - } - - private byte[] concatenateDataParts(Stream<BlobPart> blobParts) { - ImmutableList<byte[]> parts = blobParts - .map(blobPart -> OptionalUtils.executeIfEmpty( - blobPart.row, - () -> LOGGER.warn("Missing blob part for blobId {} and position {}", blobPart.blobId, blobPart.position))) - .flatMap(OptionalUtils::toStream) - .map(this::rowToData) - .collect(Guavate.toImmutableList()); - - return Bytes.concat(parts.toArray(new byte[parts.size()][])); - } - - private byte[] rowToData(Row row) { - byte[] data = new byte[row.getBytes(BlobParts.DATA).remaining()]; - row.getBytes(BlobParts.DATA).get(data); - return data; - } - - private CompletableFuture<BlobPart> readPart(CassandraBlobId blobId, int position) { - return cassandraAsyncExecutor.executeSingleRow( - selectPart.bind() - .setString(BlobTable.ID, blobId.asString()) - .setInt(BlobParts.CHUNK_NUMBER, position)) - .thenApply(row -> new BlobPart(blobId, position, row)); - } - - private static class BlobPart { - private final CassandraBlobId blobId; - private final int position; - private final Optional<Row> row; - - public BlobPart(CassandraBlobId blobId, int position, Optional<Row> row) { - Preconditions.checkNotNull(blobId); - Preconditions.checkArgument(position >= 0, "position need to be positive"); - this.blobId = blobId; - this.position = position; - this.row = row; - } - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 c80f982..72fe82e 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 @@ -59,7 +59,9 @@ import org.apache.james.backends.cassandra.init.CassandraConfiguration; 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.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.utils.Limit; import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table; @@ -176,7 +178,7 @@ public class CassandraMessageDAO { cassandraAsyncExecutor.executeVoid(boundWriteStatement(message, pair))); } - private CompletableFuture<Pair<CassandraBlobId, CassandraBlobId>> saveContent(MailboxMessage message) throws MailboxException { + private CompletableFuture<Pair<BlobId, BlobId>> saveContent(MailboxMessage message) throws MailboxException { try { return CompletableFutureUtil.combine( blobsDAO.save( @@ -191,7 +193,7 @@ public class CassandraMessageDAO { } } - private BoundStatement boundWriteStatement(MailboxMessage message, Pair<CassandraBlobId, CassandraBlobId> pair) { + private BoundStatement boundWriteStatement(MailboxMessage message, Pair<BlobId, BlobId> pair) { CassandraMessageId messageId = (CassandraMessageId) message.getMessageId(); return insert.bind() .setUUID(MESSAGE_ID, messageId.get()) http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 0d33e36..651b381 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,9 +22,9 @@ 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.mailbox.cassandra.mail.CassandraAttachmentDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2; -import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO; import org.apache.james.mailbox.model.Attachment; import org.apache.james.task.Task; import org.slf4j.Logger; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunker.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunker.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunker.java deleted file mode 100644 index 57e0bfc..0000000 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunker.java +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.cassandra.mail.utils; - -import java.nio.ByteBuffer; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.base.Preconditions; - -public class DataChunker { - - public Stream<Pair<Integer, ByteBuffer>> chunk(byte[] data, int chunkSize) { - Preconditions.checkNotNull(data); - Preconditions.checkArgument(chunkSize > 0, "ChunkSize can not be negative"); - - int size = data.length; - int fullChunkCount = size / chunkSize; - - return Stream.concat( - IntStream.range(0, fullChunkCount) - .mapToObj(i -> Pair.of(i, ByteBuffer.wrap(data, i * chunkSize, chunkSize))), - lastChunk(data, chunkSize * fullChunkCount, fullChunkCount)); - } - - private Stream<Pair<Integer, ByteBuffer>> lastChunk(byte[] data, int offset, int index) { - if (offset == data.length && index > 0) { - return Stream.empty(); - } - return Stream.of(Pair.of(index, ByteBuffer.wrap(data, offset, data.length - offset))); - } - -} http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraBlobModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraBlobModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraBlobModule.java deleted file mode 100644 index b672e34..0000000 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraBlobModule.java +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.cassandra.modules; - -import java.util.List; - -import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.components.CassandraTable; -import org.apache.james.backends.cassandra.components.CassandraType; -import org.apache.james.mailbox.cassandra.table.BlobTable; - -import com.datastax.driver.core.DataType; -import com.datastax.driver.core.schemabuilder.SchemaBuilder; -import com.google.common.collect.ImmutableList; - -public class CassandraBlobModule implements CassandraModule { - - private final List<CassandraTable> tables; - private final List<CassandraType> types; - - public CassandraBlobModule() { - tables = ImmutableList.of( - new CassandraTable(BlobTable.TABLE_NAME, - SchemaBuilder.createTable(BlobTable.TABLE_NAME) - .ifNotExists() - .addPartitionKey(BlobTable.ID, DataType.text()) - .addClusteringColumn(BlobTable.NUMBER_OF_CHUNK, DataType.cint()) - .withOptions() - .comment("Holds information for retrieving all blob parts composing this blob. " + - "Messages` headers and bodies are stored as blobparts.")), - new CassandraTable(BlobTable.BlobParts.TABLE_NAME, - SchemaBuilder.createTable(BlobTable.BlobParts.TABLE_NAME) - .ifNotExists() - .addPartitionKey(BlobTable.ID, DataType.text()) - .addClusteringColumn(BlobTable.BlobParts.CHUNK_NUMBER, DataType.cint()) - .addColumn(BlobTable.BlobParts.DATA, DataType.blob()) - .withOptions() - .comment("Holds blob parts composing blobs ." + - "Messages` headers and bodies are stored, chunked in blobparts."))); - types = ImmutableList.of(); - } - - @Override - public List<CassandraTable> moduleTables() { - return tables; - } - - @Override - public List<CassandraType> moduleTypes() { - return types; - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/BlobTable.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/BlobTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/BlobTable.java deleted file mode 100644 index 1c0b0e9..0000000 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/BlobTable.java +++ /dev/null @@ -1,32 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.cassandra.table; - -public interface BlobTable { - String TABLE_NAME = "blobs"; - String ID = "id"; - String NUMBER_OF_CHUNK = "position"; - - interface BlobParts { - String TABLE_NAME = "blobParts"; - String CHUNK_NUMBER = "chunkNumber"; - String DATA = "data"; - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java index bf341fe..7ac4e73 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java @@ -24,12 +24,12 @@ import static org.mockito.Mockito.mock; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java index c8f0092..b460538 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java @@ -22,13 +22,13 @@ package org.apache.james.mailbox.cassandra; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManagerStressTest; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java index 13da244..cba1f6e 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java @@ -21,13 +21,13 @@ package org.apache.james.mailbox.cassandra; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManagerTest; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java index 15384f5..9d18c8e 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java index 14877ed..24e64c2 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java index 2132688..bd83a42 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java @@ -25,12 +25,12 @@ import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.ContainerLifecycleConfiguration; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; +import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 3736666..c55cc11 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,7 @@ 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.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.AbstractSubscriptionManagerTest; import org.apache.james.mailbox.SubscriptionManager; import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper; @@ -32,7 +33,6 @@ import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMessageIdDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentOwnerDAO; -import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO; import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO; import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 cbf4d0f..a6d854c 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.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper; import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO; @@ -29,7 +30,6 @@ import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMessageIdDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentOwnerDAO; -import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.mail.CassandraDeletedMessageDAO; import org.apache.james.mailbox.cassandra.mail.CassandraFirstUnseenDAO; import org.apache.james.mailbox.cassandra.mail.CassandraMailboxCounterDAO; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapperTest.java index 7e4e320..ec23ad8 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapperTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra.mail; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 4c42a2d..0658b1a 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 @@ -29,10 +29,11 @@ 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.cassandra.CassandraBlobId; +import org.apache.james.blob.api.BlobId; +import org.apache.james.blob.cassandra.CassandraBlobModule; +import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.exception.AttachmentNotFoundException; import org.apache.james.mailbox.model.Attachment; import org.apache.james.mailbox.model.AttachmentId; @@ -108,7 +109,7 @@ public class CassandraAttachmentFallbackTest { .bytes("{\"property\":`\"different\"}".getBytes(StandardCharsets.UTF_8)) .build(); - CassandraBlobId blobId = blobsDAO.save(attachment.getBytes()).join(); + BlobId blobId = blobsDAO.save(attachment.getBytes()).join(); attachmentDAOV2.storeAttachment(CassandraAttachmentDAOV2.from(attachment, blobId)).join(); attachmentDAO.storeAttachment(otherAttachment).join(); @@ -143,7 +144,7 @@ public class CassandraAttachmentFallbackTest { .bytes("{\"property\":`\"different\"}".getBytes(StandardCharsets.UTF_8)) .build(); - CassandraBlobId blobId = blobsDAO.save(attachment.getBytes()).join(); + BlobId blobId = blobsDAO.save(attachment.getBytes()).join(); attachmentDAOV2.storeAttachment(CassandraAttachmentDAOV2.from(attachment, blobId)).join(); attachmentDAO.storeAttachment(otherAttachment).join(); @@ -178,7 +179,7 @@ public class CassandraAttachmentFallbackTest { .bytes("{\"property\":`\"different\"}".getBytes(StandardCharsets.UTF_8)) .build(); - CassandraBlobId blobId = blobsDAO.save(attachment.getBytes()).join(); + BlobId blobId = blobsDAO.save(attachment.getBytes()).join(); attachmentDAOV2.storeAttachment(CassandraAttachmentDAOV2.from(attachment, blobId)).join(); attachmentDAO.storeAttachment(otherAttachment).join(); http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapperTest.java index 85acca5..9325241 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapperTest.java @@ -22,12 +22,12 @@ package org.apache.james.mailbox.cassandra.mail; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAOTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAOTest.java deleted file mode 100644 index e92316a..0000000 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraBlobsDAOTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.cassandra.mail; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -import org.apache.james.backends.cassandra.CassandraCluster; -import org.apache.james.backends.cassandra.DockerCassandraRule; -import org.apache.james.backends.cassandra.init.CassandraConfiguration; -import org.apache.james.blob.cassandra.CassandraBlobId; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; - -import com.google.common.base.Strings; - -public class CassandraBlobsDAOTest { - private static final int CHUNK_SIZE = 1024; - private static final int MULTIPLE_CHUNK_SIZE = 3; - - @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); - - private CassandraCluster cassandra; - private CassandraBlobsDAO testee; - - @Before - public void setUp() { - cassandra = CassandraCluster.create( - new CassandraBlobModule(), cassandraServer.getIp(), cassandraServer.getBindingPort()); - - testee = new CassandraBlobsDAO(cassandra.getConf(), - CassandraConfiguration.builder() - .blobPartSize(CHUNK_SIZE) - .build()); - } - - @After - public void tearDown() { - cassandra.close(); - } - - @Test - public void saveShouldReturnEmptyWhenNullData() throws Exception { - assertThatThrownBy(() -> testee.save(null)) - .isInstanceOf(NullPointerException.class); - } - - @Test - public void saveShouldSaveEmptyData() throws Exception { - CassandraBlobId blobId = testee.save(new byte[]{}).join(); - - byte[] bytes = testee.read(blobId).join(); - - assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty(); - } - - @Test - public void saveShouldSaveBlankData() throws Exception { - CassandraBlobId blobId = testee.save("".getBytes(StandardCharsets.UTF_8)).join(); - - byte[] bytes = testee.read(blobId).join(); - - assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty(); - } - - @Test - public void saveShouldReturnBlobId() throws Exception { - CassandraBlobId blobId = testee.save("toto".getBytes(StandardCharsets.UTF_8)).join(); - - assertThat(blobId).isEqualTo(CassandraBlobId.from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66")); - } - - @Test - public void readShouldBeEmptyWhenNoExisting() throws IOException { - byte[] bytes = testee.read(CassandraBlobId.from("unknown")).join(); - - assertThat(bytes).isEmpty(); - } - - @Test - public void readShouldReturnSavedData() throws IOException { - CassandraBlobId blobId = testee.save("toto".getBytes(StandardCharsets.UTF_8)).join(); - - byte[] bytes = testee.read(blobId).join(); - - assertThat(new String(bytes, StandardCharsets.UTF_8)).isEqualTo("toto"); - } - - @Test - public void readShouldReturnLongSavedData() throws IOException { - String longString = Strings.repeat("0123456789\n", 1000); - CassandraBlobId blobId = testee.save(longString.getBytes(StandardCharsets.UTF_8)).join(); - - byte[] bytes = testee.read(blobId).join(); - - assertThat(new String(bytes, StandardCharsets.UTF_8)).isEqualTo(longString); - } - - @Test - public void readShouldReturnSplitSavedDataByChunk() throws IOException { - String longString = Strings.repeat("0123456789\n", MULTIPLE_CHUNK_SIZE); - CassandraBlobId blobId = testee.save(longString.getBytes(StandardCharsets.UTF_8)).join(); - - byte[] bytes = testee.read(blobId).join(); - - assertThat(new String(bytes, StandardCharsets.UTF_8)).isEqualTo(longString); - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraGenericMailboxMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraGenericMailboxMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraGenericMailboxMapperTest.java index 24eaff9..836768b 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraGenericMailboxMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraGenericMailboxMapperTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra.mail; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java index 40f7cd2..d7f1a41 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.when; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; @@ -35,7 +36,6 @@ import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java index 9490386..286d90e 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra.mail; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 2fa731d..eee499f 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,12 +38,13 @@ 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.CassandraBlobModule; +import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO.MessageIdAttachmentIds; import org.apache.james.mailbox.cassandra.mail.utils.Limit; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule; import org.apache.james.mailbox.model.Attachment; import org.apache.james.mailbox.model.ComposedMessageId; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java index 72c4544..b7499bb 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra.mail; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java index 0fdde79..e5f472f 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java @@ -23,11 +23,11 @@ import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.ContainerLifecycleConfiguration; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; +import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java index 8f62042..0f41fa3 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra.mail; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java index 2d35c39..9efe448 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java @@ -22,11 +22,11 @@ package org.apache.james.mailbox.cassandra.mail; 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.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 da4c0bf..67d5b1e 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,14 +39,14 @@ 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.CassandraBlobModule; +import org.apache.james.blob.cassandra.CassandraBlobsDAO; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentMessageIdDAO; -import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule; import org.apache.james.mailbox.model.Attachment; import org.apache.james.mailbox.model.AttachmentId; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/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 b53205e..70792a8 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 @@ -35,11 +35,11 @@ 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.cassandra.mail.CassandraAttachmentDAO; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2; -import org.apache.james.mailbox.cassandra.mail.CassandraBlobsDAO; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.model.Attachment; import org.apache.james.mailbox.model.AttachmentId; import org.junit.Before; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunkerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunkerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunkerTest.java deleted file mode 100644 index 9f3d369..0000000 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/DataChunkerTest.java +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.cassandra.mail.utils; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.stream.Stream; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -import com.google.common.collect.ImmutableList; -import com.google.common.primitives.Bytes; - -public class DataChunkerTest { - - public static final int CHUNK_SIZE = 10; - - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - private DataChunker testee; - - @Before - public void setUp() { - testee = new DataChunker(); - } - - @Test - public void chunkShouldThrowOnNullData() { - expectedException.expect(NullPointerException.class); - - testee.chunk(null, CHUNK_SIZE); - } - - @Test - public void chunkShouldThrowOnNegativeChunkSize() { - expectedException.expect(IllegalArgumentException.class); - - int chunkSize = -1; - testee.chunk(new byte[0], chunkSize); - } - - @Test - public void chunkShouldThrowOnZeroChunkSize() { - expectedException.expect(IllegalArgumentException.class); - - int chunkSize = 0; - testee.chunk(new byte[0], chunkSize); - } - - @Test - public void chunkShouldReturnOneEmptyArrayWhenInputEmpty() { - Stream<Pair<Integer, ByteBuffer>> chunks = testee.chunk(new byte[0], CHUNK_SIZE); - ByteBuffer emptyBuffer = ByteBuffer.wrap(new byte[0]); - assertThat(chunks) - .containsOnlyElementsOf(ImmutableList.of(Pair.of(0, emptyBuffer))); - } - - @Test - public void chunkShouldReturnOneArrayWhenInputLessThanChunkSize() { - byte[] data = "12345".getBytes(StandardCharsets.UTF_8); - - Stream<Pair<Integer, ByteBuffer>> chunks = testee.chunk(data, CHUNK_SIZE); - - assertThat(chunks) - .containsOnlyElementsOf(ImmutableList.of(Pair.of(0, ByteBuffer.wrap(data)))); - } - - @Test - public void chunkShouldReturnOneArrayWhenInputEqualsChunkSize() { - byte[] data = "1234567890".getBytes(StandardCharsets.UTF_8); - assertThat(data.length).isEqualTo(CHUNK_SIZE); - - Stream<Pair<Integer, ByteBuffer>> chunks = testee.chunk(data, CHUNK_SIZE); - - assertThat(chunks) - .containsOnlyElementsOf(ImmutableList.of(Pair.of(0, ByteBuffer.wrap(data)))); - } - - @Test - public void chunkShouldReturnSeveralArrayWhenInputBiggerThanChunkSize() { - byte[] part1 = "1234567890".getBytes(StandardCharsets.UTF_8); - byte[] part2 = "12345".getBytes(StandardCharsets.UTF_8); - byte[] data = Bytes.concat(part1, part2); - - Stream<Pair<Integer, ByteBuffer>> chunks = testee.chunk(data, CHUNK_SIZE); - - assertThat(chunks) - .containsOnlyElementsOf(ImmutableList.of( - Pair.of(0, ByteBuffer.wrap(part1)), - Pair.of(1, ByteBuffer.wrap(part2)))); - } - -} http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java index 0f758da..ff42a5a 100644 --- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java +++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java @@ -21,6 +21,7 @@ package org.apache.james.mpt.imapmailbox.cassandra.host; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; +import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.imap.encode.main.DefaultImapEncoderFactory; import org.apache.james.imap.main.DefaultImapDecoderFactory; import org.apache.james.imap.processor.main.DefaultImapProcessorFactory; @@ -36,7 +37,6 @@ import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule; import org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule; import org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule; import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule; http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/server/blob/blob-cassandra/pom.xml ---------------------------------------------------------------------- diff --git a/server/blob/blob-cassandra/pom.xml b/server/blob/blob-cassandra/pom.xml index 387d222..22e6985 100644 --- a/server/blob/blob-cassandra/pom.xml +++ b/server/blob/blob-cassandra/pom.xml @@ -35,10 +35,26 @@ <dependencies> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>apache-james-backends-cassandra</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>blob-api</artifactId> </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>blob-api</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>james-server-util-java8</artifactId> </dependency> <dependency> @@ -69,6 +85,10 @@ <artifactId>junit-platform-launcher</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>testcontainers</artifactId> + </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/james-project/blob/4e8bcc66/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTable.java ---------------------------------------------------------------------- diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTable.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTable.java new file mode 100644 index 0000000..bfbe742 --- /dev/null +++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTable.java @@ -0,0 +1,32 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.blob.cassandra; + +public interface BlobTable { + String TABLE_NAME = "blobs"; + String ID = "id"; + String NUMBER_OF_CHUNK = "position"; + + interface BlobParts { + String TABLE_NAME = "blobParts"; + String CHUNK_NUMBER = "chunkNumber"; + String DATA = "data"; + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
