JAMES-2032 FetchBatchSizes is configurable in guice-cassandra
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/133fbd40 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/133fbd40 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/133fbd40 Branch: refs/heads/master Commit: 133fbd402d4c9f748fcb0785039da6d9c559d45e Parents: 1fbfb80 Author: Antoine Duprat <[email protected]> Authored: Fri May 19 14:13:49 2017 +0200 Committer: benwa <[email protected]> Committed: Thu May 25 09:20:49 2017 +0700 ---------------------------------------------------------------------- .../destination/conf/batchsizes.properties | 10 ++++++++ .../destination/conf/batchsizes.properties | 10 ++++++++ .../cassandra/CassandraMailboxManager.java | 3 ++- .../cassandra/CassandraMessageManager.java | 6 +++-- .../mailbox/hbase/HBaseMailboxManager.java | 3 ++- .../mailbox/hbase/HBaseMessageManager.java | 5 ++-- .../james/mailbox/jcr/JCRMailboxManager.java | 3 ++- .../james/mailbox/jcr/JCRMessageManager.java | 5 ++-- .../james/mailbox/jpa/JPAMessageManager.java | 5 ++-- .../jpa/openjpa/OpenJPAMailboxManager.java | 3 ++- .../jpa/openjpa/OpenJPAMessageManager.java | 9 ++++--- .../inmemory/InMemoryMailboxManager.java | 3 ++- .../inmemory/InMemoryMessageManager.java | 5 ++-- .../mailbox/store/StoreMailboxManager.java | 27 ++++++++++---------- .../mailbox/store/StoreMessageManager.java | 12 ++++----- .../store/StoreMessageResultIterator.java | 16 ++++++------ .../StoreMailboxMessageResultIteratorTest.java | 8 +++--- .../modules/mailbox/CassandraMailboxModule.java | 4 ++- .../modules/mailbox/CassandraSessionModule.java | 25 +++++++++++++++++- .../src/test/resources/batchsizes.properties | 10 ++++++++ 20 files changed, 118 insertions(+), 54 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/dockerfiles/run/guice/cassandra-ldap/destination/conf/batchsizes.properties ---------------------------------------------------------------------- diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/batchsizes.properties b/dockerfiles/run/guice/cassandra-ldap/destination/conf/batchsizes.properties new file mode 100644 index 0000000..47da2c5 --- /dev/null +++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/batchsizes.properties @@ -0,0 +1,10 @@ +# Those properties let you configure the number of messages queried at the same time. +# IMAP FETCH command +fetch.metadata=200 +fetch.headers=200 +fetch.body=100 +fetch.full=50 +# IMAP COPY command +copy=100 +# IMAP MOVE command +move=100 http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/dockerfiles/run/guice/cassandra/destination/conf/batchsizes.properties ---------------------------------------------------------------------- diff --git a/dockerfiles/run/guice/cassandra/destination/conf/batchsizes.properties b/dockerfiles/run/guice/cassandra/destination/conf/batchsizes.properties new file mode 100644 index 0000000..47da2c5 --- /dev/null +++ b/dockerfiles/run/guice/cassandra/destination/conf/batchsizes.properties @@ -0,0 +1,10 @@ +# Those properties let you configure the number of messages queried at the same time. +# IMAP FETCH command +fetch.metadata=200 +fetch.headers=200 +fetch.body=100 +fetch.full=50 +# IMAP COPY command +copy=100 +# IMAP MOVE command +move=100 http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java index c1cb183..3656690 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java @@ -132,7 +132,8 @@ public class CassandraMailboxManager extends StoreMailboxManager { getQuotaManager(), getQuotaRootResolver(), getMessageParser(), - getMessageIdFactory()); + getMessageIdFactory(), + getBatchSizes()); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java index 5eeac40..6d5c085 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java @@ -29,6 +29,7 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; @@ -44,9 +45,10 @@ public class CassandraMessageManager extends StoreMessageManager { public CassandraMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager, - QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) throws MailboxException { + QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, + BatchSizes batchSizes) throws MailboxException { super(mapperFactory, index, dispatcher, locker, mailbox, new UnionMailboxACLResolver(), - new SimpleGroupMembershipResolver(), quotaManager, quotaRootResolver, messageParser, messageIdFactory); + new SimpleGroupMembershipResolver(), quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes); } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java index 76c83e5..baeadb9 100644 --- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java +++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java @@ -104,6 +104,7 @@ public class HBaseMailboxManager extends StoreMailboxManager { getQuotaManager(), getQuotaRootResolver(), getMessageParser(), - getMessageIdFactory()); + getMessageIdFactory(), + getBatchSizes()); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java index 793a1cd..00386b8 100644 --- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java +++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java @@ -28,6 +28,7 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; @@ -44,9 +45,9 @@ public class HBaseMessageManager extends StoreMessageManager { public HBaseMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher, MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, QuotaManager quotaManager, - QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) throws MailboxException { + QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException { super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, - quotaRootResolver, messageParser, messageIdFactory); + quotaRootResolver, messageParser, messageIdFactory, batchSizes); } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java index 9efe0ec..c3105b7 100644 --- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java +++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java @@ -76,7 +76,8 @@ public class JCRMailboxManager extends StoreMailboxManager implements JCRImapCon getQuotaManager(), getQuotaRootResolver(), getMessageParser(), - getMessageIdFactory()); + getMessageIdFactory(), + getBatchSizes()); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java index 64dc241..fbf25e0 100644 --- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java +++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java @@ -35,6 +35,7 @@ import org.apache.james.mailbox.model.MessageAttachment; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; @@ -55,10 +56,10 @@ public class JCRMessageManager extends StoreMessageManager { public JCRMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, final MailboxEventDispatcher dispatcher, MailboxPathLocker locker, JCRMailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, Logger log, - QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) + QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException { super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, - quotaRootResolver, messageParser, messageIdFactory); + quotaRootResolver, messageParser, messageIdFactory, batchSizes); this.log = log; } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java index 8f3c800..2817940 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java @@ -35,6 +35,7 @@ import org.apache.james.mailbox.model.MessageAttachment; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; @@ -53,10 +54,10 @@ public class JPAMessageManager extends StoreMessageManager { final MailboxEventDispatcher dispatcher, MailboxPathLocker locker, final Mailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, QuotaManager quotaManager, - QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) throws MailboxException { + QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException { super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, - quotaManager, quotaRootResolver, messageParser, messageIdFactory); + quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java index 8285d9a..d6bb542 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java @@ -104,6 +104,7 @@ public class OpenJPAMailboxManager extends JPAMailboxManager { getQuotaManager(), getQuotaRootResolver(), getMessageParser(), - getMessageIdFactory()); + getMessageIdFactory(), + getBatchSizes()); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java index cde1305..7091d36 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java @@ -37,6 +37,7 @@ import org.apache.james.mailbox.model.MessageAttachment; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.Mailbox; @@ -63,9 +64,9 @@ public class OpenJPAMessageManager extends JPAMessageManager { MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, - MessageId.Factory messageIdFactory) throws MailboxException { + MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException { this(mapperFactory, index, dispatcher, locker, mailbox, AdvancedFeature.None, aclResolver, - groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory); + groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes); } public OpenJPAMessageManager(MailboxSessionMapperFactory mapperFactory, @@ -73,9 +74,9 @@ public class OpenJPAMessageManager extends JPAMessageManager { MailboxPathLocker locker, Mailbox mailbox, AdvancedFeature f, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, - MessageId.Factory messageIdFactory) throws MailboxException { + MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException { - super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory); + super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes); this.feature = f; } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java index a37b43d..3b465ef 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java @@ -86,6 +86,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager { getQuotaManager(), getQuotaRootResolver(), getMessageParser(), - getMessageIdFactory()); + getMessageIdFactory(), + getBatchSizes()); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java index a9448b6..b573b9b 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java @@ -10,6 +10,7 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; @@ -21,8 +22,8 @@ public class InMemoryMessageManager extends StoreMessageManager { public InMemoryMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher, MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, - QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) throws MailboxException { - super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory); + QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) throws MailboxException { + super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index 522c277..e354395 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -131,7 +131,7 @@ public class StoreMailboxManager implements MailboxManager { private QuotaUpdater quotaUpdater; - private FetchBatchSizes fetchBatchSizes = FetchBatchSizes.defaultValues(); + private BatchSizes batchSizes = BatchSizes.defaultValues(); private final MessageParser messageParser; private final Factory messageIdFactory; @@ -207,18 +207,21 @@ public class StoreMailboxManager implements MailboxManager { this.quotaUpdater = quotaUpdater; } - public void setCopyBatchSize(int copyBatchSize) { - this.copyBatcher = new MessageBatcher(copyBatchSize); + public void setCopyBatchSize(BatchSizes batchSizes) { + this.copyBatcher = new MessageBatcher(batchSizes.getCopyBatchSize()); } - public void setMoveBatchSize(int moveBatchSize) { - this.moveBatcher = new MessageBatcher(moveBatchSize); + public void setMoveBatchSize(BatchSizes batchSizes) { + this.moveBatcher = new MessageBatcher(batchSizes.getMoveBatchSize()); } - public void setFetchBatchSizes(FetchBatchSizes fetchBatchSizes) { - this.fetchBatchSizes = fetchBatchSizes; + public void setBatchSizes(BatchSizes batchSizes) { + this.batchSizes = batchSizes; } + public BatchSizes getBatchSizes() { + return batchSizes; + } /** * Init the {@link MailboxManager} @@ -461,7 +464,7 @@ public class StoreMailboxManager implements MailboxManager { protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException { return new StoreMessageManager(getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(), getLocker(), mailbox, getAclResolver(), getGroupMembershipResolver(), getQuotaManager(), - getQuotaRootResolver(), getMessageParser(), getMessageIdFactory()); + getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), getBatchSizes()); } /** @@ -490,9 +493,7 @@ public class StoreMailboxManager implements MailboxManager { } else { session.getLog().debug("Loaded mailbox " + mailboxPath); - StoreMessageManager messageManager = createMessageManager(mailboxRow, session); - messageManager.setFetchBatchSizes(fetchBatchSizes); - return messageManager; + return createMessageManager(mailboxRow, session); } } @@ -514,9 +515,7 @@ public class StoreMailboxManager implements MailboxManager { session.getLog().debug("Loaded mailbox " + mailboxId.serialize()); - StoreMessageManager messageManager = createMessageManager(mailboxRow, session); - messageManager.setFetchBatchSizes(fetchBatchSizes); - return messageManager; + return createMessageManager(mailboxRow, session); } private boolean belongsToCurrentUser(Mailbox mailbox, MailboxSession session) { http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index e83970b..5f7e279 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -169,11 +169,12 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana private final Factory messageIdFactory; - private FetchBatchSizes fetchBatchSizes = FetchBatchSizes.defaultValues(); + private BatchSizes batchSizes = BatchSizes.defaultValues(); public StoreMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher, MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, - QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) throws MailboxException { + QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes) + throws MailboxException { this.mailbox = mailbox; this.dispatcher = dispatcher; this.mapperFactory = mapperFactory; @@ -185,10 +186,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana this.quotaRootResolver = quotaRootResolver; this.messageParser = messageParser; this.messageIdFactory = messageIdFactory; - } - - public void setFetchBatchSizes(FetchBatchSizes fetchBatchSizes) { - this.fetchBatchSizes = fetchBatchSizes; + this.batchSizes = batchSizes; } protected Factory getMessageIdFactory() { @@ -699,7 +697,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana */ public MessageResultIterator getMessages(MessageRange set, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException { final MessageMapper messageMapper = mapperFactory.getMessageMapper(mailboxSession); - return new StoreMessageResultIterator(messageMapper, mailbox, set, fetchBatchSizes, fetchGroup); + return new StoreMessageResultIterator(messageMapper, mailbox, set, batchSizes, fetchGroup); } /** http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java index 34896fd..22da87c 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java @@ -58,22 +58,22 @@ public class StoreMessageResultIterator implements MessageResultIterator { private final MessageUid from; private MessageUid cursor; private final MessageUid to; - private final FetchBatchSizes fetchBatchSizes; + private final BatchSizes batchSizes; private final Type type; private final MessageMapper mapper; private final FetchType ftype; - public StoreMessageResultIterator(MessageMapper mapper, Mailbox mailbox, MessageRange range, FetchBatchSizes fetchBatchSizes, org.apache.james.mailbox.model.MessageResult.FetchGroup group) { + public StoreMessageResultIterator(MessageMapper mapper, Mailbox mailbox, MessageRange range, BatchSizes batchSizes, org.apache.james.mailbox.model.MessageResult.FetchGroup group) { this.mailbox = mailbox; this.group = group; this.mapper = mapper; this.from = range.getUidFrom(); this.cursor = this.from; this.to = range.getUidTo(); - this.fetchBatchSizes = fetchBatchSizes; + this.batchSizes = batchSizes; this.type = range.getType(); this.ftype = getFetchType(group); - LOGGER.debug("fetchBatchSizes used: " + fetchBatchSizes); + LOGGER.debug("batchSizes used: " + batchSizes); } /** @@ -165,13 +165,13 @@ public class StoreMessageResultIterator implements MessageResultIterator { private int batchSizeFromFetchType(FetchType fetchType) { switch (fetchType) { case Metadata: - return fetchBatchSizes.getMetadata(); + return batchSizes.getFetchMetadata(); case Headers: - return fetchBatchSizes.getHeaders(); + return batchSizes.getFetchHeaders(); case Body: - return fetchBatchSizes.getBody(); + return batchSizes.getFetchBody(); case Full: - return fetchBatchSizes.getFull(); + return batchSizes.getFetchFull(); } throw new RuntimeException("Unknown fetchTpe: " + fetchType); } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java index 97d6399..8d4fb54 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java @@ -191,7 +191,7 @@ public class StoreMailboxMessageResultIteratorTest { @Test public void testBatching() { MessageRange range = MessageRange.range(MessageUid.of(1), MessageUid.of(10)); - FetchBatchSizes batchSize = FetchBatchSizes.uniqueBatchSize(3); + BatchSizes batchSize = BatchSizes.uniqueBatchSize(3); StoreMessageResultIterator it = new StoreMessageResultIterator(new TestMessageMapper(MessageRange.all()), null, range, batchSize, new TestFetchGroup()); assertThat(it).extracting(new Extractor<MessageResult, Long>(){ @@ -205,7 +205,7 @@ public class StoreMailboxMessageResultIteratorTest { @Test public void nextShouldReturnFirstElement() { MessageRange range = MessageUid.of(1).toRange(); - FetchBatchSizes batchSize = FetchBatchSizes.uniqueBatchSize(42); + BatchSizes batchSize = BatchSizes.uniqueBatchSize(42); StoreMessageResultIterator iterator = new StoreMessageResultIterator(new TestMessageMapper(range), null, range, batchSize, new TestFetchGroup()); assertThat(iterator.next()).isNotNull(); } @@ -214,7 +214,7 @@ public class StoreMailboxMessageResultIteratorTest { public void nextShouldThrowWhenNoElement() { MessageRange messages = MessageUid.of(1).toRange(); MessageRange findRange = MessageUid.of(2).toRange(); - FetchBatchSizes batchSize = FetchBatchSizes.uniqueBatchSize(42); + BatchSizes batchSize = BatchSizes.uniqueBatchSize(42); StoreMessageResultIterator iterator = new StoreMessageResultIterator(new TestMessageMapper(messages), null, findRange, batchSize, new TestFetchGroup()); iterator.next(); } @@ -223,7 +223,7 @@ public class StoreMailboxMessageResultIteratorTest { public void hasNextShouldReturnFalseWhenNoElement() { MessageRange messages = MessageUid.of(1).toRange(); MessageRange findRange = MessageUid.of(2).toRange(); - FetchBatchSizes batchSize = FetchBatchSizes.uniqueBatchSize(42); + BatchSizes batchSize = BatchSizes.uniqueBatchSize(42); StoreMessageResultIterator iterator = new StoreMessageResultIterator(new TestMessageMapper(messages), null, findRange, batchSize, new TestFetchGroup()); assertThat(iterator.hasNext()).isFalse(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java index a9ae5b8..fc7c3cc 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java @@ -46,6 +46,7 @@ import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.Authenticator; import org.apache.james.mailbox.store.Authorizator; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.NoMailboxPathLocker; import org.apache.james.mailbox.store.StoreAttachmentManager; @@ -135,10 +136,11 @@ public class CassandraMailboxModule extends AbstractModule { @Provides @Named(Names.MAILBOXMANAGER_NAME) @Singleton public MailboxManager provideMailboxManager(CassandraMailboxManager cassandraMailboxManager, ListeningCurrentQuotaUpdater quotaUpdater, - QuotaManager quotaManager, QuotaRootResolver quotaRootResolver) throws MailboxException { + QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, BatchSizes batchSizes) throws MailboxException { cassandraMailboxManager.setQuotaUpdater(quotaUpdater); cassandraMailboxManager.setQuotaManager(quotaManager); cassandraMailboxManager.setQuotaRootResolver(quotaRootResolver); + cassandraMailboxManager.setBatchSizes(batchSizes); cassandraMailboxManager.init(); return cassandraMailboxManager; } http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/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 d4569f1..04ff8ce 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 @@ -37,6 +37,7 @@ import org.apache.james.backends.cassandra.init.ClusterBuilder; import org.apache.james.backends.cassandra.init.ClusterWithKeyspaceCreatedFactory; import org.apache.james.backends.cassandra.init.QueryLoggerConfiguration; import org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory; +import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.util.Host; import org.apache.james.utils.PropertiesProvider; import org.apache.james.utils.RetryExecutorUtil; @@ -59,6 +60,7 @@ import com.nurkiewicz.asyncretry.AsyncRetryExecutor; import com.nurkiewicz.asyncretry.function.RetryCallable; public class CassandraSessionModule extends AbstractModule { + private static final Logger LOGGER = LoggerFactory.getLogger(CassandraSessionModule.class); private static final int DEFAULT_CONNECTION_MAX_RETRIES = 10; @@ -70,7 +72,7 @@ public class CassandraSessionModule extends AbstractModule { private static final String LOCALHOST = "127.0.0.1"; private static final int DEFAULT_READ_TIMEOUT_MILLIS = 5000; private static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 5000; - + private static final String BATCHSIZES_FILE_NAME = "batchsizes"; @Override protected void configure() { @@ -102,6 +104,27 @@ public class CassandraSessionModule extends AbstractModule { @Provides @Singleton + BatchSizes getBatchSizesConfiguration(PropertiesProvider propertiesProvider) { + try { + PropertiesConfiguration configuration = propertiesProvider.getConfiguration(BATCHSIZES_FILE_NAME); + BatchSizes batchSizes = BatchSizes.builder() + .fetchMetadata(configuration.getInt("fetch.metadata", BatchSizes.DEFAULT_BATCH_SIZE)) + .fetchHeaders(configuration.getInt("fetch.headers", BatchSizes.DEFAULT_BATCH_SIZE)) + .fetchBody(configuration.getInt("fetch.body", BatchSizes.DEFAULT_BATCH_SIZE)) + .fetchFull(configuration.getInt("fetch.full", BatchSizes.DEFAULT_BATCH_SIZE)) + .copyBatchSize(configuration.getInt("copy", BatchSizes.DEFAULT_BATCH_SIZE)) + .moveBatchSize(configuration.getInt("move", BatchSizes.DEFAULT_BATCH_SIZE)) + .build(); + LOGGER.debug("BatchSize configuration: " + batchSizes); + return batchSizes; + } catch (FileNotFoundException | ConfigurationException e) { + LOGGER.warn("Could not locate batchsizes configuration file. Using default values."); + return BatchSizes.defaultValues(); + } + } + + @Provides + @Singleton Cluster provideCluster(CassandraSessionConfiguration cassandraSessionConfiguration, AsyncRetryExecutor executor) throws FileNotFoundException, ConfigurationException, ExecutionException, InterruptedException { PropertiesConfiguration configuration = cassandraSessionConfiguration.getConfiguration(); List<Host> servers = listCassandraServers(configuration); http://git-wip-us.apache.org/repos/asf/james-project/blob/133fbd40/server/container/guice/cassandra-guice/src/test/resources/batchsizes.properties ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/test/resources/batchsizes.properties b/server/container/guice/cassandra-guice/src/test/resources/batchsizes.properties new file mode 100644 index 0000000..47da2c5 --- /dev/null +++ b/server/container/guice/cassandra-guice/src/test/resources/batchsizes.properties @@ -0,0 +1,10 @@ +# Those properties let you configure the number of messages queried at the same time. +# IMAP FETCH command +fetch.metadata=200 +fetch.headers=200 +fetch.body=100 +fetch.full=50 +# IMAP COPY command +copy=100 +# IMAP MOVE command +move=100 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
