MAILBOX-304 Configure read timeout for attachment v2 migration
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b3c308e9 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b3c308e9 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b3c308e9 Branch: refs/heads/master Commit: b3c308e9c0a0a18a69c37889701230b10c379834 Parents: 2001443 Author: benwa <btell...@linagora.com> Authored: Sat Sep 9 15:50:56 2017 +0700 Committer: Antoine Duprat <adup...@linagora.com> Committed: Wed Sep 13 10:17:37 2017 +0200 ---------------------------------------------------------------------- .../cassandra/init/CassandraConfiguration.java | 36 ++++++++++++++++---- .../init/CassandraConfigurationTest.java | 24 +++++++++++-- .../cassandra/mail/CassandraAttachmentDAO.java | 10 +++--- ...estCassandraMailboxSessionMapperFactory.java | 2 +- .../mail/CassandraAttachmentDAOTest.java | 5 ++- .../mail/CassandraAttachmentFallbackTest.java | 5 ++- .../migration/AttachmentV2MigrationTest.java | 5 ++- .../modules/mailbox/CassandraSessionModule.java | 3 ++ .../mailbox/CassandraSessionModuleTest.java | 1 + .../modules/mailbox/cassandra.properties | 1 + src/site/xdoc/server/config-cassandra.xml | 15 ++++++++ 11 files changed, 90 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraConfiguration.java ---------------------------------------------------------------------- diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraConfiguration.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraConfiguration.java index 17945e8..2121cff 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraConfiguration.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraConfiguration.java @@ -19,16 +19,17 @@ package org.apache.james.backends.cassandra.init; +import static java.lang.Math.toIntExact; + import java.util.Objects; import java.util.Optional; +import java.util.concurrent.TimeUnit; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; public class CassandraConfiguration { - public static final CassandraConfiguration DEFAULT_CONFIGURATION = builder().build(); - public static final int DEFAULT_MESSAGE_CHUNK_SIZE_ON_READ = 100; public static final int DEFAULT_EXPUNGE_BATCH_SIZE = 100; public static final int DEFAULT_UPDATE_FLAGS_BATCH_SIZE = 20; @@ -39,6 +40,8 @@ public class CassandraConfiguration { public static final int DEFAULT_ACL_MAX_RETRY = 1000; public static final int DEFAULT_FETCH_NEXT_PAGE_ADVANCE_IN_ROW = 100; public static final int DEFAULT_BLOB_PART_SIZE = 100 * 1024; + public static final int DEFAULT_ATTACHMENT_V2_MIGRATION_READ_TIMEOUT = toIntExact(TimeUnit.DAYS.toMillis(1)); + public static final CassandraConfiguration DEFAULT_CONFIGURATION = builder().build(); public static class Builder { private Optional<Integer> messageReadChunkSize = Optional.empty(); @@ -51,6 +54,7 @@ public class CassandraConfiguration { private Optional<Integer> aclMaxRetry = Optional.empty(); private Optional<Integer> fetchNextPageInAdvanceRow = Optional.empty(); private Optional<Integer> blobPartSize = Optional.empty(); + private Optional<Integer> attachmentV2MigrationReadTimeout = Optional.empty(); public Builder messageReadChunkSize(int value) { Preconditions.checkArgument(value > 0, "messageReadChunkSize needs to be strictly positive"); @@ -112,6 +116,12 @@ public class CassandraConfiguration { return this; } + public Builder attachmentV2MigrationReadTimeout(int value) { + Preconditions.checkArgument(value > 0, "attachmentV2MigrationReadTimeout needs to be strictly positive"); + this.attachmentV2MigrationReadTimeout = Optional.of(value); + return this; + } + public Builder messageReadChunkSize(Optional<Integer> value) { value.ifPresent(this::messageReadChunkSize); return this; @@ -162,6 +172,11 @@ public class CassandraConfiguration { return this; } + public Builder attachmentV2MigrationReadTimeout(Optional<Integer> value) { + value.ifPresent(this::attachmentV2MigrationReadTimeout); + return this; + } + public CassandraConfiguration build() { return new CassandraConfiguration(aclMaxRetry.orElse(DEFAULT_ACL_MAX_RETRY), messageReadChunkSize.orElse(DEFAULT_MESSAGE_CHUNK_SIZE_ON_READ), @@ -172,7 +187,8 @@ public class CassandraConfiguration { modSeqMaxRetry.orElse(DEFAULT_MODSEQ_MAX_RETRY), uidMaxRetry.orElse(DEFAULT_UID_MAX_RETRY), fetchNextPageInAdvanceRow.orElse(DEFAULT_FETCH_NEXT_PAGE_ADVANCE_IN_ROW), - blobPartSize.orElse(DEFAULT_BLOB_PART_SIZE)); + blobPartSize.orElse(DEFAULT_BLOB_PART_SIZE), + attachmentV2MigrationReadTimeout.orElse(DEFAULT_ATTACHMENT_V2_MIGRATION_READ_TIMEOUT)); } } @@ -190,12 +206,13 @@ public class CassandraConfiguration { private final int aclMaxRetry; private final int fetchNextPageInAdvanceRow; private final int blobPartSize; + private final int attachmentV2MigrationReadTimeout; @VisibleForTesting CassandraConfiguration(int aclMaxRetry, int messageReadChunkSize, int expungeChunkSize, int flagsUpdateChunkSize, int flagsUpdateMessageIdMaxRetry, int flagsUpdateMessageMaxRetry, int modSeqMaxRetry, int uidMaxRetry, int fetchNextPageInAdvanceRow, - int blobPartSize) { + int blobPartSize, final int attachmentV2MigrationReadTimeout) { this.aclMaxRetry = aclMaxRetry; this.messageReadChunkSize = messageReadChunkSize; this.expungeChunkSize = expungeChunkSize; @@ -206,6 +223,7 @@ public class CassandraConfiguration { this.fetchNextPageInAdvanceRow = fetchNextPageInAdvanceRow; this.flagsUpdateChunkSize = flagsUpdateChunkSize; this.blobPartSize = blobPartSize; + this.attachmentV2MigrationReadTimeout = attachmentV2MigrationReadTimeout; } public int getBlobPartSize() { @@ -248,6 +266,10 @@ public class CassandraConfiguration { return fetchNextPageInAdvanceRow; } + public int getAttachmentV2MigrationReadTimeout() { + return attachmentV2MigrationReadTimeout; + } + @Override public final boolean equals(Object o) { if (o instanceof CassandraConfiguration) { @@ -262,7 +284,8 @@ public class CassandraConfiguration { && Objects.equals(this.uidMaxRetry, that.uidMaxRetry) && Objects.equals(this.flagsUpdateChunkSize, that.flagsUpdateChunkSize) && Objects.equals(this.fetchNextPageInAdvanceRow, that.fetchNextPageInAdvanceRow) - && Objects.equals(this.blobPartSize, that.blobPartSize); + && Objects.equals(this.blobPartSize, that.blobPartSize) + && Objects.equals(this.attachmentV2MigrationReadTimeout, that.attachmentV2MigrationReadTimeout); } return false; } @@ -271,7 +294,7 @@ public class CassandraConfiguration { public final int hashCode() { return Objects.hash(aclMaxRetry, messageReadChunkSize, expungeChunkSize, flagsUpdateMessageIdMaxRetry, flagsUpdateMessageMaxRetry, modSeqMaxRetry, uidMaxRetry, fetchNextPageInAdvanceRow, flagsUpdateChunkSize, - blobPartSize); + blobPartSize, attachmentV2MigrationReadTimeout); } @Override @@ -287,6 +310,7 @@ public class CassandraConfiguration { .add("flagsUpdateChunkSize", flagsUpdateChunkSize) .add("uidMaxRetry", uidMaxRetry) .add("blobPartSize", blobPartSize) + .add("attachmentV2MigrationReadTimeout", attachmentV2MigrationReadTimeout) .toString(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationTest.java ---------------------------------------------------------------------- diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationTest.java index 473a56e..efde00e 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationTest.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationTest.java @@ -21,7 +21,6 @@ package org.apache.james.backends.cassandra.init; import static org.assertj.core.api.Assertions.assertThat; -import org.apache.james.backends.cassandra.init.CassandraConfiguration; import org.assertj.core.api.JUnitSoftAssertions; import org.junit.Rule; import org.junit.Test; @@ -39,7 +38,9 @@ public class CassandraConfigurationTest { @Test public void cassandraConfigurationShouldRespectBeanContract() { - EqualsVerifier.forClass(CassandraConfiguration.class).verify(); + EqualsVerifier.forClass(CassandraConfiguration.class) + .allFieldsShouldBeUsed() + .verify(); } @Test @@ -193,6 +194,22 @@ public class CassandraConfigurationTest { } @Test + public void attachmentV2MigrationReadTimeoutShouldThrowOnZero() { + expectedException.expect(IllegalArgumentException.class); + + CassandraConfiguration.builder() + .attachmentV2MigrationReadTimeout(0); + } + + @Test + public void attachmentV2MigrationReadTimeoutShouldThrowOnNegativeValue() { + expectedException.expect(IllegalArgumentException.class); + + CassandraConfiguration.builder() + .attachmentV2MigrationReadTimeout(-1); + } + + @Test public void builderShouldCreateTheRightObject() { int aclMaxRetry = 1; int modSeqMaxRetry = 2; @@ -204,6 +221,7 @@ public class CassandraConfigurationTest { int messageReadChunkSize = 8; int expungeChunkSize = 9; int blobPartSize = 10; + int attachmentV2MigrationReadTimeout = 11; CassandraConfiguration configuration = CassandraConfiguration.builder() .aclMaxRetry(aclMaxRetry) @@ -216,6 +234,7 @@ public class CassandraConfigurationTest { .messageReadChunkSize(messageReadChunkSize) .expungeChunkSize(expungeChunkSize) .blobPartSize(blobPartSize) + .attachmentV2MigrationReadTimeout(attachmentV2MigrationReadTimeout) .build(); softly.assertThat(configuration.getAclMaxRetry()).isEqualTo(aclMaxRetry); @@ -228,6 +247,7 @@ public class CassandraConfigurationTest { softly.assertThat(configuration.getMessageReadChunkSize()).isEqualTo(messageReadChunkSize); softly.assertThat(configuration.getExpungeChunkSize()).isEqualTo(expungeChunkSize); softly.assertThat(configuration.getBlobPartSize()).isEqualTo(blobPartSize); + softly.assertThat(configuration.getAttachmentV2MigrationReadTimeout()).isEqualTo(attachmentV2MigrationReadTimeout); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/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 532dea3..e3d05a5 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 @@ -24,7 +24,6 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.delete; 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; @@ -36,11 +35,11 @@ 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.init.CassandraConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.mailbox.model.Attachment; @@ -53,16 +52,16 @@ 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 CassandraConfiguration configuration; private final PreparedStatement insertStatement; private final PreparedStatement deleteStatement; private final PreparedStatement selectStatement; private final PreparedStatement selectAllStatement; @Inject - public CassandraAttachmentDAO(Session session, CassandraUtils cassandraUtils) { + public CassandraAttachmentDAO(Session session, CassandraUtils cassandraUtils, CassandraConfiguration configuration) { this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); this.selectStatement = prepareSelect(session); @@ -70,6 +69,7 @@ public class CassandraAttachmentDAO { this.deleteStatement = prepareDelete(session); this.insertStatement = prepareInsert(session); this.cassandraUtils = cassandraUtils; + this.configuration = configuration; } private PreparedStatement prepareDelete(Session session) { @@ -111,7 +111,7 @@ public class CassandraAttachmentDAO { return cassandraUtils.convertToStream( cassandraAsyncExecutor.execute( selectAllStatement.bind() - .setReadTimeoutMillis(SELECT_ALL_TIMEOUT) + .setReadTimeoutMillis(configuration.getAttachmentV2MigrationReadTimeout()) .setFetchSize(1)) .join()) .map(this::attachment); http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/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 c276ce2..312accd 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, CassandraUtils.WITH_DEFAULT_CONFIGURATION), + new CassandraAttachmentDAO(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION), new CassandraAttachmentDAOV2(session), new CassandraDeletedMessageDAO(session), cassandraBlobsDAO, CassandraUtils.WITH_DEFAULT_CONFIGURATION, http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/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 3b00a1a..4f53c2f 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.init.CassandraConfiguration; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; import org.apache.james.mailbox.model.Attachment; @@ -52,7 +53,9 @@ public class CassandraAttachmentDAOTest { public void setUp() throws Exception { cassandra = CassandraCluster.create(new CassandraAttachmentModule(), cassandraServer.getIp(), cassandraServer.getBindingPort()); - testee = new CassandraAttachmentDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); + testee = new CassandraAttachmentDAO(cassandra.getConf(), + CassandraUtils.WITH_DEFAULT_CONFIGURATION, + CassandraConfiguration.DEFAULT_CONFIGURATION); } @After http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/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 90ad116..7408840 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 @@ -26,6 +26,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.CassandraConfiguration; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.mailbox.cassandra.ids.BlobId; @@ -66,7 +67,9 @@ public class CassandraAttachmentFallbackTest { cassandraServer.getBindingPort()); attachmentDAOV2 = new CassandraAttachmentDAOV2(cassandra.getConf()); - attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); + attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(), + CassandraUtils.WITH_DEFAULT_CONFIGURATION, + CassandraConfiguration.DEFAULT_CONFIGURATION); blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); attachmentMapper = new CassandraAttachmentMapper(attachmentDAO, attachmentDAOV2, blobsDAO); } http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java index 7bbbb39..1b92747 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java @@ -30,6 +30,7 @@ import java.util.stream.Stream; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; +import org.apache.james.backends.cassandra.init.CassandraConfiguration; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.mailbox.cassandra.ids.BlobId; @@ -67,7 +68,9 @@ public class AttachmentV2MigrationTest { cassandraServer.getIp(), cassandraServer.getBindingPort()); - attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); + attachmentDAO = new CassandraAttachmentDAO(cassandra.getConf(), + CassandraUtils.WITH_DEFAULT_CONFIGURATION, + CassandraConfiguration.DEFAULT_CONFIGURATION); attachmentDAOV2 = new CassandraAttachmentDAOV2(cassandra.getConf()); blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java index 885e39a..fb08814 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java @@ -72,6 +72,7 @@ public class CassandraSessionModule extends AbstractModule { private static final String CHUNK_SIZE_MESSAGE_READ = "chunk.size.message.read"; private static final String CHUNK_SIZE_EXPUNGE = "chunk.size.expunge"; private static final String BLOB_PART_SIZE = "mailbox.blob.part.size"; + private static final String ATTACHMENT_V2_MIGRATION_READ_TIMEOUT = "attachment.v2.migration.read.timeout"; private static final String CASSANDRA_NODES = "cassandra.nodes"; @Override @@ -157,6 +158,8 @@ public class CassandraSessionModule extends AbstractModule { propertiesConfiguration.getInteger(CHUNK_SIZE_EXPUNGE, null))) .blobPartSize(Optional.ofNullable( propertiesConfiguration.getInteger(BLOB_PART_SIZE, null))) + .attachmentV2MigrationReadTimeout(Optional.ofNullable( + propertiesConfiguration.getInteger(ATTACHMENT_V2_MIGRATION_READ_TIMEOUT, null))) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java index 29c3853..da0358e 100644 --- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java +++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java @@ -60,6 +60,7 @@ public class CassandraSessionModuleTest { .messageReadChunkSize(8) .expungeChunkSize(9) .blobPartSize(10) + .attachmentV2MigrationReadTimeout(11) .build()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties b/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties index 8d6c9fe..d41cb75 100644 --- a/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties +++ b/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties @@ -8,3 +8,4 @@ chunk.size.flags.update=7 chunk.size.message.read=8 chunk.size.expunge=9 mailbox.blob.part.size=10 +attachment.v2.migration.read.timeout=11 http://git-wip-us.apache.org/repos/asf/james-project/blob/b3c308e9/src/site/xdoc/server/config-cassandra.xml ---------------------------------------------------------------------- diff --git a/src/site/xdoc/server/config-cassandra.xml b/src/site/xdoc/server/config-cassandra.xml index b8dc965..c2980c9 100644 --- a/src/site/xdoc/server/config-cassandra.xml +++ b/src/site/xdoc/server/config-cassandra.xml @@ -171,6 +171,21 @@ </subsection> + <subsection name="From V3 to V4"> + + <p>Migration tag on git repository: <a href="https://github.com/apache/james-project/releases/tag/cassandra_migration_v3_to_v4">cassandra_migration_v3_to_v4</a></p> + + <p>Goal is to store attachments in the blob tables.</p> + + <p>Summary of available options for this migration:</p> + + <dl> + <dt><strong>attachment.v2.migration.read.timeout</strong></dt> + <dd>Optional. Defaults to one day.<br/> Controls how many milliseconds before the read on attachment v1 time out.</dd> + </dl> + + </subsection> + </section> </body> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org