Repository: qpid-jms Updated Branches: refs/heads/master 6a42bb937 -> 997c5aec5
ensure the enqueueFirst method on PriorityMessageQueue actually does what it says on the tin Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/28dc394b Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/28dc394b Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/28dc394b Branch: refs/heads/master Commit: 28dc394bd7ec82c39eaa700d46239d0f2443c3eb Parents: 6a42bb9 Author: Robert Gemmell <[email protected]> Authored: Fri Jan 16 15:27:32 2015 +0000 Committer: Robert Gemmell <[email protected]> Committed: Fri Jan 16 15:27:32 2015 +0000 ---------------------------------------------------------------------- .../qpid/jms/util/PriorityMessageQueue.java | 11 ++++++++--- .../qpid/jms/util/PriorityMessageQueueTest.java | 19 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/28dc394b/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/PriorityMessageQueue.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/PriorityMessageQueue.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/PriorityMessageQueue.java index e0c7357..75a48e1 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/PriorityMessageQueue.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/PriorityMessageQueue.java @@ -26,7 +26,8 @@ import org.apache.qpid.jms.message.JmsInboundMessageDispatch; /** * Simple Message Priority ordered Queue. Message envelopes are stored in the - * Queue based on their priority value. + * Queue based on their priority value, except where {@link #enqueueFirst} is + * used. */ public final class PriorityMessageQueue extends AbstractMessageQueue { @@ -55,7 +56,7 @@ public final class PriorityMessageQueue extends AbstractMessageQueue { @Override public void enqueueFirst(JmsInboundMessageDispatch envelope) { synchronized (lock) { - getList(envelope).addFirst(envelope); + getList(MAX_PRIORITY - 1).addFirst(envelope); this.size++; lock.notify(); } @@ -139,6 +140,10 @@ public final class PriorityMessageQueue extends AbstractMessageQueue { } private LinkedList<JmsInboundMessageDispatch> getList(JmsInboundMessageDispatch envelope) { - return lists[getPriority(envelope)]; + return getList(getPriority(envelope)); + } + + private LinkedList<JmsInboundMessageDispatch> getList(int priority) { + return lists[priority]; } } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/28dc394b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java index e0fee32..79d3c19 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java @@ -148,15 +148,24 @@ public class PriorityMessageQueueTest { } @Test - public void testEnqueueFirst() { - JmsInboundMessageDispatch message1 = createEnvelope(); - JmsInboundMessageDispatch message2 = createEnvelope(); - JmsInboundMessageDispatch message3 = createEnvelope(); + public void testEnqueueFirstOverridesPriority() { + // Add a higher priority message + JmsInboundMessageDispatch message1 = createEnvelope(7); + + queue.enqueue(message1); + + // Add other lower priority messages 'first'. + JmsInboundMessageDispatch message2 = createEnvelope(4); + JmsInboundMessageDispatch message3 = createEnvelope(3); + JmsInboundMessageDispatch message4 = createEnvelope(2); - queue.enqueueFirst(message1); queue.enqueueFirst(message2); queue.enqueueFirst(message3); + queue.enqueueFirst(message4); + // Verify they dequeue in the reverse of the order + // they were added, and not priority order. + assertSame(message4, queue.dequeueNoWait()); assertSame(message3, queue.dequeueNoWait()); assertSame(message2, queue.dequeueNoWait()); assertSame(message1, queue.dequeueNoWait()); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
