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