You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2017/09/11 08:56:27 UTC

[04/18] james-project git commit: MAILBOX-304 Primary key for attachments should be UUID

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 <bt...@linagora.com>
Authored: Thu Sep 7 10:08:48 2017 +0700
Committer: benwa <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org