Author: norman
Date: Fri Jul 29 13:18:17 2011
New Revision: 1152209
URL: http://svn.apache.org/viewvc?rev=1152209&view=rev
Log:
Fix batch fetching of messages
Added:
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/StoreMessageResultIteratorTest.java
(with props)
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java?rev=1152209&r1=1152208&r2=1152209&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
Fri Jul 29 13:18:17 2011
@@ -109,10 +109,9 @@ public class StoreMessageResultIterator<
@Override
public boolean hasNext() {
- if (next == null || !next.hasNext()) {
+ if (!done && (next == null || !next.hasNext())) {
try {
MessageRange range;
-
switch (type) {
default:
case ALL:
@@ -120,7 +119,6 @@ public class StoreMessageResultIterator<
break;
case FROM:
range = MessageRange.from(from);
-
break;
case ONE:
range = MessageRange.one(from);
@@ -131,13 +129,16 @@ public class StoreMessageResultIterator<
}
next = mapper.findInMailbox(mailbox, range, ftype, batchSize);
+ if (!next.hasNext()) {
+ done = true;
+ }
} catch (MailboxException e) {
this.exception = e;
done = true;
}
return !done;
} else {
- return true;
+ return !done;
}
}
@@ -156,6 +157,9 @@ public class StoreMessageResultIterator<
// move the start UID behind the last fetched message UID if needed
if (!next.hasNext()) {
from = result.getUid() + 1;
+ if (result.getUid() >= to || from > to) {
+ done = true;
+ }
}
return result;
}
Added:
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/StoreMessageResultIteratorTest.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/StoreMessageResultIteratorTest.java?rev=1152209&view=auto
==============================================================================
---
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/StoreMessageResultIteratorTest.java
(added)
+++
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/StoreMessageResultIteratorTest.java
Fri Jul 29 13:18:17 2011
@@ -0,0 +1,184 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox.store;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.mail.Flags;
+import javax.mail.util.SharedByteArrayInputStream;
+
+import junit.framework.Assert;
+
+import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
+import org.apache.james.mailbox.MessageRange;
+import org.apache.james.mailbox.MessageResult;
+import org.apache.james.mailbox.MessageResult.FetchGroup;
+import org.apache.james.mailbox.UpdatedFlags;
+import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.Message;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMessage;
+import org.junit.Test;
+
+public class StoreMessageResultIteratorTest {
+
+ @Test
+ public void testBatching() {
+ MessageRange range = MessageRange.range(1, 10);
+ int batchSize = 3;
+ StoreMessageResultIterator<Long> it = new
StoreMessageResultIterator<Long>(new MessageMapper<Long>() {
+
+ @Override
+ public void endRequest() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public <T> T execute(Transaction<T> transaction)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Iterator<Message<Long>> findInMailbox(
+ Mailbox<Long> mailbox,
+ MessageRange set,
+
org.apache.james.mailbox.store.mail.MessageMapper.FetchType type,
+ int limit) throws MailboxException {
+ long start = set.getUidFrom();
+ long end = set.getUidTo();
+ long calcEnd = start + limit;
+ if (calcEnd > end) {
+ calcEnd = end;
+ }
+
+ List<Message<Long>> messages = new
ArrayList<Message<Long>>();
+ long i = start;
+ while ( i < calcEnd ) {
+ long uid = i;
+ SimpleMessage<Long> m = new
SimpleMessage<Long>(null, 0, 0, new SharedByteArrayInputStream("".getBytes()),
new Flags(), new PropertyBuilder(), 1L);
+ m.setUid(uid);
+ messages.add(m);
+ i++;
+ }
+ return messages.iterator();
+ }
+
+ @Override
+ public Map<Long, MessageMetaData>
expungeMarkedForDeletionInMailbox(
+ Mailbox<Long> mailbox, MessageRange set)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+
+ }
+
+ @Override
+ public long countMessagesInMailbox(Mailbox<Long>
mailbox)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+
+ }
+
+ @Override
+ public long countUnseenMessagesInMailbox(Mailbox<Long>
mailbox)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void delete(Mailbox<Long> mailbox, Message<Long>
message)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Long findFirstUnseenMessageUid(Mailbox<Long>
mailbox)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Long> findRecentMessageUidsInMailbox(
+ Mailbox<Long> mailbox) throws
MailboxException {
+ throw new UnsupportedOperationException();
+
+ }
+
+ @Override
+ public MessageMetaData add(Mailbox<Long> mailbox,
+ Message<Long> message) throws
MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Iterator<UpdatedFlags> updateFlags(Mailbox<Long>
mailbox,
+ Flags flags, boolean value, boolean
replace,
+ MessageRange set) throws
MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public MessageMetaData copy(Mailbox<Long> mailbox,
+ Message<Long> original) throws
MailboxException {
+ throw new UnsupportedOperationException();
+
+ }
+
+ @Override
+ public long getLastUid(Mailbox<Long> mailbox)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public long getHighestModSeq(Mailbox<Long> mailbox)
+ throws MailboxException {
+ throw new UnsupportedOperationException();
+ }
+
+ }, null, range, batchSize, new FetchGroup() {
+
+ @Override
+ public Set<PartContentDescriptor>
getPartContentDescriptors() {
+ return null;
+ }
+
+ @Override
+ public int content() {
+ return FetchGroup.MINIMAL;
+ }
+ });
+
+ long i = 1;
+ while(it.hasNext()) {
+ MessageResult r = it.next();
+ Assert.assertEquals(i++, r.getUid());
+ }
+ Assert.assertEquals(10, i);
+
+ }
+
+}
Propchange:
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/StoreMessageResultIteratorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]