MAILBOX-304 Primary key for attachments should be UUID
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/762be3bb Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/762be3bb Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/762be3bb Branch: refs/heads/master Commit: 762be3bb153a44e9bb46e696c89e435de1b2ad8e Parents: 7c8dc3d Author: benwa <btell...@linagora.com> Authored: Thu Sep 7 10:08:48 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Thu Sep 7 10:08:48 2017 +0700 ---------------------------------------------------------------------- .../org/apache/james/mailbox/model/AttachmentId.java | 7 +++++++ .../org/apache/james/mailbox/model/AttachmentIdTest.java | 11 ++++++++++- .../mailbox/cassandra/mail/CassandraAttachmentDAOV2.java | 8 +++++--- .../cassandra/modules/CassandraAttachmentModule.java | 4 +++- .../cassandra/table/CassandraAttachmentV2Table.java | 1 + 5 files changed, 26 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/762be3bb/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java index 0cdc4c3..5832ba4 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java @@ -19,6 +19,9 @@ package org.apache.james.mailbox.model; +import java.nio.charset.StandardCharsets; +import java.util.UUID; + import org.apache.commons.codec.digest.DigestUtils; import com.google.common.base.MoreObjects; @@ -48,6 +51,10 @@ public class AttachmentId { return id; } + public UUID asUUID() { + return UUID.nameUUIDFromBytes(id.getBytes(StandardCharsets.UTF_8)); + } + @Override public boolean equals(Object obj) { if (obj instanceof AttachmentId) { http://git-wip-us.apache.org/repos/asf/james-project/blob/762be3bb/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java index 75039bd..95e2cca 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java @@ -21,7 +21,8 @@ package org.apache.james.mailbox.model; import static org.assertj.core.api.Assertions.assertThat; -import org.apache.james.mailbox.model.AttachmentId; +import java.util.UUID; + import org.junit.Test; public class AttachmentIdTest { @@ -54,4 +55,12 @@ public class AttachmentIdTest { AttachmentId attachmentId = AttachmentId.from(expectedId); assertThat(attachmentId.getId()).isEqualTo(expectedId); } + + @Test + public void asUUIDShouldReturnAValidUUID() { + AttachmentId attachmentId = AttachmentId.from("magic"); + + assertThat(attachmentId.asUUID()) + .isEqualTo(UUID.fromString("2f3a4fcc-ca64-36e3-9bcf-33e92dd93135")); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/762be3bb/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 be8bebf..4b0bd49 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 @@ -26,6 +26,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select; import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table.BLOB_ID; import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table.FIELDS; import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table.ID; +import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table.ID_AS_UUID; import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table.SIZE; import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table.TABLE_NAME; import static org.apache.james.mailbox.cassandra.table.CassandraAttachmentV2Table.TYPE; @@ -37,7 +38,6 @@ import javax.inject.Inject; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.mailbox.cassandra.ids.BlobId; -import org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable; import org.apache.james.mailbox.model.Attachment; import org.apache.james.mailbox.model.AttachmentId; import org.slf4j.Logger; @@ -69,6 +69,7 @@ public class CassandraAttachmentDAOV2 { private PreparedStatement prepareInsert(Session session) { return session.prepare( insertInto(TABLE_NAME) + .value(ID_AS_UUID, bindMarker(ID_AS_UUID)) .value(ID, bindMarker(ID)) .value(BLOB_ID, bindMarker(BLOB_ID)) .value(TYPE, bindMarker(TYPE)) @@ -78,7 +79,7 @@ public class CassandraAttachmentDAOV2 { private PreparedStatement prepareSelect(Session session) { return session.prepare(select(FIELDS) .from(TABLE_NAME) - .where(eq(ID, bindMarker(ID)))); + .where(eq(ID_AS_UUID, bindMarker(ID_AS_UUID)))); } public CompletableFuture<Optional<Attachment>> getAttachment(AttachmentId attachmentId) { @@ -89,7 +90,7 @@ public class CassandraAttachmentDAOV2 { Preconditions.checkArgument(attachmentId != null); return cassandraAsyncExecutor.executeSingleRow( selectStatement.bind() - .setString(CassandraAttachmentTable.ID, attachmentId.getId())) + .setUUID(ID_AS_UUID, attachmentId.asUUID())) .thenCompose(this::attachment) .thenApply(optional -> logNotFound(attachmentId, logIfEmpty, optional)); } @@ -106,6 +107,7 @@ public class CassandraAttachmentDAOV2 { .thenApply(Optional::get) // attachment payload is never null .thenApply(blobId -> insertStatement.bind() + .setUUID(ID_AS_UUID, attachment.getAttachmentId().asUUID()) .setString(ID, attachment.getAttachmentId().getId()) .setLong(SIZE, attachment.getSize()) .setString(TYPE, attachment.getType()) http://git-wip-us.apache.org/repos/asf/james-project/blob/762be3bb/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java index ecd9d64..b386e6a 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra.modules; import static com.datastax.driver.core.DataType.bigint; import static com.datastax.driver.core.DataType.blob; import static com.datastax.driver.core.DataType.text; +import static com.datastax.driver.core.DataType.uuid; import java.util.List; @@ -53,7 +54,8 @@ public class CassandraAttachmentModule implements CassandraModule { new CassandraTable(CassandraAttachmentV2Table.TABLE_NAME, SchemaBuilder.createTable(CassandraAttachmentV2Table.TABLE_NAME) .ifNotExists() - .addPartitionKey(CassandraAttachmentV2Table.ID, text()) + .addPartitionKey(CassandraAttachmentV2Table.ID_AS_UUID, uuid()) + .addColumn(CassandraAttachmentV2Table.ID, text()) .addColumn(CassandraAttachmentV2Table.BLOB_ID, text()) .addColumn(CassandraAttachmentV2Table.TYPE, text()) .addColumn(CassandraAttachmentV2Table.SIZE, bigint()) http://git-wip-us.apache.org/repos/asf/james-project/blob/762be3bb/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java index 9b3daec..fa4ca48 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra.table; public interface CassandraAttachmentV2Table { String TABLE_NAME = "attachmentV2"; + String ID_AS_UUID = "idAsUUID"; String ID = "id"; String BLOB_ID = "blobId"; String TYPE = "type"; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org