Repository: james-project
Updated Branches:
  refs/heads/master ed61657d2 -> 81bf0a3c8


MAILBOX-304 Allow to retrieve all attachments from old DAO


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9031bbd7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9031bbd7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9031bbd7

Branch: refs/heads/master
Commit: 9031bbd795ece9732df3fa1ab54ad0292a92783f
Parents: ed61657
Author: benwa <btell...@linagora.com>
Authored: Fri Sep 8 16:15:43 2017 +0700
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Wed Sep 13 10:17:06 2017 +0200

----------------------------------------------------------------------
 .../cassandra/mail/CassandraAttachmentDAO.java  | 25 +++++++++++++-
 ...estCassandraMailboxSessionMapperFactory.java |  2 +-
 .../mail/CassandraAttachmentDAOTest.java        | 35 +++++++++++++++++++-
 .../mail/CassandraAttachmentFallbackTest.java   |  3 +-
 4 files changed, 61 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9031bbd7/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
index df8af76..d1ec829 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAO.java
@@ -23,6 +23,7 @@ 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 static java.lang.Math.toIntExact;
 import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.FIELDS;
 import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.ID;
 import static 
org.apache.james.mailbox.cassandra.table.CassandraAttachmentTable.PAYLOAD;
@@ -34,10 +35,13 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.AttachmentId;
 
@@ -48,16 +52,21 @@ import com.google.common.base.Preconditions;
 
 public class CassandraAttachmentDAO {
 
+    public static final int SELECT_ALL_TIMEOUT = 
toIntExact(TimeUnit.DAYS.toMillis(1));
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
+    private final CassandraUtils cassandraUtils;
     private final PreparedStatement insertStatement;
     private final PreparedStatement selectStatement;
+    private final PreparedStatement selectAllStatement;
 
     @Inject
-    public CassandraAttachmentDAO(Session session) {
+    public CassandraAttachmentDAO(Session session, CassandraUtils 
cassandraUtils) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
 
         this.selectStatement = prepareSelect(session);
+        this.selectAllStatement = prepareSelectAll(session);
         this.insertStatement = prepareInsert(session);
+        this.cassandraUtils = cassandraUtils;
     }
 
     private PreparedStatement prepareInsert(Session session) {
@@ -75,6 +84,11 @@ public class CassandraAttachmentDAO {
             .where(eq(ID, bindMarker(ID))));
     }
 
+    private PreparedStatement prepareSelectAll(Session session) {
+        return session.prepare(select(FIELDS)
+            .from(TABLE_NAME));
+    }
+
     public CompletableFuture<Optional<Attachment>> getAttachment(AttachmentId 
attachmentId) {
         Preconditions.checkArgument(attachmentId != null);
         return cassandraAsyncExecutor.executeSingleRow(
@@ -83,6 +97,15 @@ public class CassandraAttachmentDAO {
             .thenApply(optional -> optional.map(this::attachment));
     }
 
+    public Stream<Attachment> retrieveAll() {
+        return cassandraUtils.convertToStream(
+            cassandraAsyncExecutor.execute(
+                selectAllStatement.bind()
+                    .setReadTimeoutMillis(SELECT_ALL_TIMEOUT)
+                    .setFetchSize(1))
+                .join())
+            .map(this::attachment);
+    }
 
     public CompletableFuture<Void> storeAttachment(Attachment attachment) 
throws IOException {
         return cassandraAsyncExecutor.executeVoid(

http://git-wip-us.apache.org/repos/asf/james-project/blob/9031bbd7/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 78667ce..c276ce2 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
@@ -58,7 +58,7 @@ public class TestCassandraMailboxSessionMapperFactory {
             new CassandraMailboxPathDAO(session, typesProvider),
             new CassandraFirstUnseenDAO(session),
             new CassandraApplicableFlagDAO(session),
-            new CassandraAttachmentDAO(session),
+            new CassandraAttachmentDAO(session, 
CassandraUtils.WITH_DEFAULT_CONFIGURATION),
             new CassandraAttachmentDAOV2(session),
             new CassandraDeletedMessageDAO(session),
             cassandraBlobsDAO, CassandraUtils.WITH_DEFAULT_CONFIGURATION,

http://git-wip-us.apache.org/repos/asf/james-project/blob/9031bbd7/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
index c44bde8..e26af08 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOTest.java
@@ -26,6 +26,7 @@ import java.util.Optional;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule;
 import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.AttachmentId;
@@ -34,8 +35,11 @@ import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
 
+import com.github.steveash.guavate.Guavate;
+
 public class CassandraAttachmentDAOTest {
     public static final AttachmentId ATTACHMENT_ID = AttachmentId.from("id1");
+    public static final AttachmentId ATTACHMENT_ID_2 = 
AttachmentId.from("id2");
 
     @ClassRule
     public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
@@ -48,7 +52,7 @@ public class CassandraAttachmentDAOTest {
     public void setUp() throws Exception {
         cassandra = CassandraCluster.create(new CassandraAttachmentModule(),
             cassandraServer.getIp(), cassandraServer.getBindingPort());
-        testee = new CassandraAttachmentDAO(cassandra.getConf());
+        testee = new CassandraAttachmentDAO(cassandra.getConf(), 
CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     @After
@@ -64,6 +68,35 @@ public class CassandraAttachmentDAOTest {
     }
 
     @Test
+    public void retrieveAllShouldReturnEmptyByDefault() {
+        assertThat(
+            testee.retrieveAll()
+                .collect(Guavate.toImmutableList()))
+            .isEmpty();
+    }
+
+    @Test
+    public void retrieveAllShouldReturnStoredAttachments() throws Exception {
+        Attachment attachment1 = Attachment.builder()
+            .attachmentId(ATTACHMENT_ID)
+            .type("application/json")
+            
.bytes("{\"property\":`\"value1\"}".getBytes(StandardCharsets.UTF_8))
+            .build();
+        Attachment attachment2 = Attachment.builder()
+            .attachmentId(ATTACHMENT_ID_2)
+            .type("application/json")
+            
.bytes("{\"property\":`\"value2\"}".getBytes(StandardCharsets.UTF_8))
+            .build();
+        testee.storeAttachment(attachment1).join();
+        testee.storeAttachment(attachment2).join();
+
+        assertThat(
+            testee.retrieveAll()
+                .collect(Guavate.toImmutableList()))
+            .containsOnly(attachment1, attachment2);
+    }
+
+    @Test
     public void getAttachmentShouldReturnAttachmentWhenStored() throws 
Exception {
         Attachment attachment = Attachment.builder()
             .attachmentId(ATTACHMENT_ID)

http://git-wip-us.apache.org/repos/asf/james-project/blob/9031bbd7/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 91a6c6c..90ad116 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
@@ -27,6 +27,7 @@ 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.CassandraModuleComposite;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.ids.BlobId;
 import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule;
@@ -65,7 +66,7 @@ public class CassandraAttachmentFallbackTest {
             cassandraServer.getBindingPort());
 
         attachmentDAOV2 = new CassandraAttachmentDAOV2(cassandra.getConf());
-        attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf());
+        attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(), 
CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         blobsDAO = new CassandraBlobsDAO(cassandra.getConf());
         attachmentMapper = new CassandraAttachmentMapper(attachmentDAO, 
attachmentDAOV2, blobsDAO);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to