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]

Reply via email to