JAMES-2032 Use FetchBatchSizes in StoreMessageResultIterator

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

Branch: refs/heads/master
Commit: 1fbfb8023ca324f7adbb2d68f795f4ef52ad0017
Parents: 5d989ae
Author: Antoine Duprat <[email protected]>
Authored: Fri May 19 11:12:35 2017 +0200
Committer: benwa <[email protected]>
Committed: Thu May 25 09:20:49 2017 +0700

----------------------------------------------------------------------
 .../mailbox/store/StoreMailboxManager.java      | 11 ++++----
 .../mailbox/store/StoreMessageManager.java      |  8 +++---
 .../store/StoreMessageResultIterator.java       | 27 +++++++++++++++++---
 .../StoreMailboxMessageResultIteratorTest.java  |  8 +++---
 4 files changed, 36 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1fbfb802/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 87c3cfa..522c277 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
@@ -100,7 +100,6 @@ import com.google.common.collect.Iterables;
 public class StoreMailboxManager implements MailboxManager {
 
     public static final char SQL_WILDCARD_CHAR = '%';
-    public static final int DEFAULT_FETCH_BATCH_SIZE = 200;
 
     private MailboxEventDispatcher dispatcher;
     private DelegatingMailboxListener delegatingListener;
@@ -132,7 +131,7 @@ public class StoreMailboxManager implements MailboxManager {
 
     private QuotaUpdater quotaUpdater;
 
-    private int fetchBatchSize = DEFAULT_FETCH_BATCH_SIZE;
+    private FetchBatchSizes fetchBatchSizes = FetchBatchSizes.defaultValues();
 
     private final MessageParser messageParser;
     private final Factory messageIdFactory;
@@ -216,8 +215,8 @@ public class StoreMailboxManager implements MailboxManager {
         this.moveBatcher = new MessageBatcher(moveBatchSize);
     }
 
-    public void setFetchBatchSize(int fetchBatchSize) {
-        this.fetchBatchSize = fetchBatchSize;
+    public void setFetchBatchSizes(FetchBatchSizes fetchBatchSizes) {
+        this.fetchBatchSizes = fetchBatchSizes;
     }
 
 
@@ -492,7 +491,7 @@ public class StoreMailboxManager implements MailboxManager {
             session.getLog().debug("Loaded mailbox " + mailboxPath);
 
             StoreMessageManager messageManager = 
createMessageManager(mailboxRow, session);
-            messageManager.setFetchBatchSize(fetchBatchSize);
+            messageManager.setFetchBatchSizes(fetchBatchSizes);
             return messageManager;
         }
     }
@@ -516,7 +515,7 @@ public class StoreMailboxManager implements MailboxManager {
         session.getLog().debug("Loaded mailbox " + mailboxId.serialize());
 
         StoreMessageManager messageManager = createMessageManager(mailboxRow, 
session);
-        messageManager.setFetchBatchSize(fetchBatchSize);
+        messageManager.setFetchBatchSizes(fetchBatchSizes);
         return messageManager;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/1fbfb802/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 919b59b..e83970b 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,7 +169,7 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
 
     private final Factory messageIdFactory;
     
-    private int fetchBatchSize;
+    private FetchBatchSizes fetchBatchSizes = FetchBatchSizes.defaultValues();
 
     public StoreMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, MailboxEventDispatcher dispatcher, 
             MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver 
aclResolver, GroupMembershipResolver groupMembershipResolver,
@@ -187,8 +187,8 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
         this.messageIdFactory = messageIdFactory;
     }
 
-    public void setFetchBatchSize(int fetchBatchSize) {
-        this.fetchBatchSize = fetchBatchSize;
+    public void setFetchBatchSizes(FetchBatchSizes fetchBatchSizes) {
+        this.fetchBatchSizes = fetchBatchSizes;
     }
 
     protected Factory getMessageIdFactory() {
@@ -699,7 +699,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, 
fetchBatchSize, fetchGroup);
+        return new StoreMessageResultIterator(messageMapper, mailbox, set, 
fetchBatchSizes, fetchGroup);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/1fbfb802/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 56f8674..34896fd 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
@@ -42,11 +42,15 @@ import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Objects;
 
 public class StoreMessageResultIterator implements MessageResultIterator {
 
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(StoreMessageResultIterator.class);
+
     private Iterator<MailboxMessage> next = null;
     private MailboxException exception;
     private final Mailbox mailbox;
@@ -54,21 +58,22 @@ public class StoreMessageResultIterator implements 
MessageResultIterator {
     private final MessageUid from;
     private MessageUid cursor;
     private final MessageUid to;
-    private final int batchSize;
+    private final FetchBatchSizes fetchBatchSizes;
     private final Type type;
     private final MessageMapper mapper;
     private final FetchType ftype;
 
-    public StoreMessageResultIterator(MessageMapper mapper, Mailbox mailbox, 
MessageRange range, int batchSize, 
org.apache.james.mailbox.model.MessageResult.FetchGroup group) {
+    public StoreMessageResultIterator(MessageMapper mapper, Mailbox mailbox, 
MessageRange range, FetchBatchSizes fetchBatchSizes, 
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.batchSize = batchSize;
+        this.fetchBatchSizes = fetchBatchSizes;
         this.type = range.getType();
         this.ftype = getFetchType(group);
+        LOGGER.debug("fetchBatchSizes used: " + fetchBatchSizes);
     }
 
     /**
@@ -154,7 +159,21 @@ public class StoreMessageResultIterator implements 
MessageResultIterator {
             range = MessageRange.range(cursor, to);
             break;
         }
-        next = mapper.findInMailbox(mailbox, range, ftype, batchSize);
+        next = mapper.findInMailbox(mailbox, range, ftype, 
batchSizeFromFetchType(ftype));
+    }
+
+    private int batchSizeFromFetchType(FetchType fetchType) {
+        switch (fetchType) {
+        case Metadata:
+            return fetchBatchSizes.getMetadata();
+        case Headers:
+            return fetchBatchSizes.getHeaders();
+        case Body:
+            return fetchBatchSizes.getBody();
+        case Full:
+            return fetchBatchSizes.getFull();
+        }
+        throw new RuntimeException("Unknown fetchTpe: " + fetchType);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/1fbfb802/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 a96a6de..97d6399 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));
-        int batchSize = 3;
+        FetchBatchSizes batchSize = FetchBatchSizes.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();
-        int batchSize = 42;
+        FetchBatchSizes batchSize = FetchBatchSizes.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();
-        int batchSize = 42;
+        FetchBatchSizes batchSize = FetchBatchSizes.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();
-        int batchSize = 42;
+        FetchBatchSizes batchSize = FetchBatchSizes.uniqueBatchSize(42);
         StoreMessageResultIterator iterator = new 
StoreMessageResultIterator(new TestMessageMapper(messages), null, findRange, 
batchSize, new TestFetchGroup());
         assertThat(iterator.hasNext()).isFalse();
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to