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]

Reply via email to