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