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]
