summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2009-04-10 22:09:50 +0000
committerMartin Ritchie <ritchiem@apache.org>2009-04-10 22:09:50 +0000
commit8457d581a12f8d13f1c330b8bbeef0d1a5006e74 (patch)
treee045328168bfc52698d349d9f62aad1bea7a5775 /java
parent10cc1af6a8b5218abef0cb55f4e6be50b4f042ad (diff)
downloadqpid-python-8457d581a12f8d13f1c330b8bbeef0d1a5006e74.tar.gz
QPID-1794 : Moved processing of single message removals to just before the transaction commit rather than before the dequeue. As previously the list of dequeues was being traversed for every dequeue in that transaction batch with nothing to do. So removing this loop should increase performance in large batch cases.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@764078 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java59
1 files changed, 29 insertions, 30 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java b/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java
index 8d7b22d470..7bf78ad977 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java
@@ -114,36 +114,6 @@ public class BaseTransactionLog implements TransactionLog
{
context.dequeueMessage(queue, messageId);
- if (context.inTransaction())
- {
-
- Map<Long, List<AMQQueue>> messageMap = context.getDequeueMap();
-
- //For each Message ID that is in the map check
- Set<Long> messageIDs = messageMap.keySet();
-
- if (_logger.isInfoEnabled())
- {
- _logger.info("Pre-Processing single dequeue of:" + messageIDs);
- }
-
- Iterator iterator = messageIDs.iterator();
-
- while (iterator.hasNext())
- {
- Long messageID = (Long) iterator.next();
- //If we don't have a gloabl reference for this message then there is only a single enqueue
- //can check here to see if this is the last reference?
- if (_idToQueues.get(messageID) == null)
- {
- // Add the removal of the message to this transaction
- _delegate.removeMessage(context, messageID);
- // Remove this message ID as we have processed it so we don't reprocess after the main commmit
- iterator.remove();
- }
- }
- }
-
_delegate.dequeueMessage(context, queue, messageId);
if (!context.inTransaction())
@@ -172,6 +142,35 @@ public class BaseTransactionLog implements TransactionLog
public void commitTran(StoreContext context) throws AMQException
{
+
+ Map<Long, List<AMQQueue>> messageMap = context.getDequeueMap();
+
+ //For each Message ID that is in the map check
+ Set<Long> messageIDs = messageMap.keySet();
+
+ if (_logger.isInfoEnabled())
+ {
+ _logger.info("Pre-Processing single dequeue of:" + messageIDs);
+ }
+
+ Iterator iterator = messageIDs.iterator();
+
+ while (iterator.hasNext())
+ {
+ Long messageID = (Long) iterator.next();
+ //If we don't have a gloabl reference for this message then there
+ // is only a single enqueue can check here to see if this is the
+ // last reference?
+ if (_idToQueues.get(messageID) == null)
+ {
+ // Add the removal of the message to this transaction
+ _delegate.removeMessage(context, messageID);
+ // Remove this message ID as we have processed it so we don't
+ // reprocess after the main commmit
+ iterator.remove();
+ }
+ }
+
//Perform real commit of current data
_delegate.commitTran(context);