From 9891b843df7b0b5b96cfb008de5397f53d71e76f Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Fri, 25 May 2012 15:00:24 +0000 Subject: QPID-4012: update the priority queue entry sub lists to maintain a record of the priority index they represent, refer to this when comparing queue entries in order to avoid using the metadata later than is possible git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1342667 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/qpid/server/queue/PriorityQueueList.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'java') diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java b/java/broker/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java index 1d13ee66c0..66315af9fb 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java +++ b/java/broker/src/main/java/org/apache/qpid/server/queue/PriorityQueueList.java @@ -37,7 +37,7 @@ public class PriorityQueueList implements QueueEntryList _priorityOffset = 5-((priorities + 1)/2); for(int i = 0; i < priorities; i++) { - _priorityLists[i] = new PriorityQueueEntrySubList(queue); + _priorityLists[i] = new PriorityQueueEntrySubList(queue, i); } } @@ -164,9 +164,12 @@ public class PriorityQueueList implements QueueEntryList private static class PriorityQueueEntrySubList extends SimpleQueueEntryList { - public PriorityQueueEntrySubList(AMQQueue queue) + private int _listPriority; + + public PriorityQueueEntrySubList(AMQQueue queue, int listPriority) { super(queue); + _listPriority = listPriority; } @Override @@ -174,6 +177,11 @@ public class PriorityQueueList implements QueueEntryList { return new PriorityQueueEntryImpl(this, message); } + + public int getListPriority() + { + return _listPriority; + } } private static class PriorityQueueEntryImpl extends SimpleQueueEntryImpl @@ -186,8 +194,9 @@ public class PriorityQueueList implements QueueEntryList @Override public int compareTo(final QueueEntry o) { - byte thisPriority = getMessageHeader().getPriority(); - byte otherPriority = o.getMessageHeader().getPriority(); + PriorityQueueEntrySubList pqel = (PriorityQueueEntrySubList)((PriorityQueueEntryImpl)o).getQueueEntryList(); + int otherPriority = pqel.getListPriority(); + int thisPriority = ((PriorityQueueEntrySubList) getQueueEntryList()).getListPriority(); if(thisPriority != otherPriority) { -- cgit v1.2.1