summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2009-08-09 21:33:15 +0000
committerRobert Gemmell <robbie@apache.org>2009-08-09 21:33:15 +0000
commit8bb3446353548453b09fbd5718469d4b8bd34f4f (patch)
tree35b5cd079a5a24955ac211fc2300b4187b1a0032
parent2ee74c6814d2cc79f66c56adc504a998f97db2e2 (diff)
downloadqpid-python-8bb3446353548453b09fbd5718469d4b8bd34f4f.tar.gz
QPID-2036: replace the getMessagesRangeOnTheQueue() implementation with a QueueEntryFilter based version that correctly excludes the final message if it has been deleted, and is in general easier to reason about than the previous version
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@802615 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java37
1 files changed, 15 insertions, 22 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
index 929045599b..43790b59d7 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
@@ -852,30 +852,23 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener
*/
public List<QueueEntry> getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition)
{
- List<QueueEntry> queueEntries = new ArrayList<QueueEntry>();
-
- QueueEntryIterator it = _entries.iterator();
-
- long index = 1;
- for ( ; index < fromPosition && !it.atTail(); index++)
- {
- it.advance();
- }
-
- if(index < fromPosition)
- {
- //The queue does not contain enough entries to reach our range.
- //return the empty list.
- return queueEntries;
- }
-
- for ( ; index <= toPosition && !it.atTail(); index++)
+ List<QueueEntry> entries = getMessagesOnTheQueue(new QueueEntryFilter()
{
- it.advance();
- queueEntries.add(it.getNode());
- }
+ private long position = 0;
+
+ public boolean accept(QueueEntry entry)
+ {
+ position++;
+ return (position >= fromPosition) && (position <= toPosition);
+ }
- return queueEntries;
+ public boolean filterComplete()
+ {
+ return position >= toPosition;
+ }
+ });
+
+ return entries;
}
public void moveMessagesToAnotherQueue(final long fromMessageId,