diff options
| author | Robert Gemmell <robbie@apache.org> | 2009-08-09 21:33:15 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2009-08-09 21:33:15 +0000 |
| commit | 8bb3446353548453b09fbd5718469d4b8bd34f4f (patch) | |
| tree | 35b5cd079a5a24955ac211fc2300b4187b1a0032 | |
| parent | 2ee74c6814d2cc79f66c56adc504a998f97db2e2 (diff) | |
| download | qpid-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.java | 37 |
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, |
