From 75003ee3a0fd4973b48b1c5bff179e8c9f2f8258 Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Sun, 9 Aug 2009 21:33:15 +0000 Subject: 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/qpid@802615 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/qpid/server/queue/SimpleAMQQueue.java | 37 +++++++++------------- 1 file changed, 15 insertions(+), 22 deletions(-) (limited to 'java') diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java index 929045599b..43790b59d7 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java +++ b/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 getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition) { - List queueEntries = new ArrayList(); - - 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 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, -- cgit v1.2.1