From 66e32c70039212e13bccb9d31a32f049ebe74e13 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Wed, 25 Jan 2012 14:40:30 +0000 Subject: QPID-3780 : [Java Broker] reduce scavenge overhead on large queues git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1235771 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/server/queue/SimpleQueueEntryList.java | 44 +++++++++++++--------- 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'java') diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleQueueEntryList.java b/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleQueueEntryList.java index b40e5a28c2..af0a654372 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleQueueEntryList.java +++ b/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleQueueEntryList.java @@ -21,6 +21,7 @@ package org.apache.qpid.server.queue; import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; import org.apache.qpid.server.message.ServerMessage; @@ -46,6 +47,7 @@ public class SimpleQueueEntryList implements QueueEntryList _unscavengedHWM = new AtomicReference(); public SimpleQueueEntryList(AMQQueue queue) @@ -55,28 +57,17 @@ public class SimpleQueueEntryList implements QueueEntryList _scavengeCount) - { - _scavenges.set(0L); - scavenge(); - } - } - } - void scavenge() { + SimpleQueueEntryImpl hwm = _unscavengedHWM.getAndSet(null); SimpleQueueEntryImpl next = _head.getNextValidEntry(); - while (next != null) + if(hwm != null) { - next = next.getNextValidEntry(); + while (next != null && hwm.compareTo(next)>0) + { + next = next.getNextValidEntry(); + } } } @@ -182,7 +173,24 @@ public class SimpleQueueEntryList implements QueueEntryList _scavengeCount) + { + _scavenges.set(0L); + scavenge(); + } + } } public int getPriorities() -- cgit v1.2.1