Author: ritchiem
Date: Sat Apr 11 00:18:46 2009
New Revision: 764118
URL: http://svn.apache.org/viewvc?rev=764118&view=rev
Log:
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.
merged from trunk r764078
Modified:
qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java
Modified:
qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java
URL:
http://svn.apache.org/viewvc/qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java?rev=764118&r1=764117&r2=764118&view=diff
==============================================================================
---
qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java
(original)
+++
qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/transactionlog/BaseTransactionLog.java
Sat Apr 11 00:18:46 2009
@@ -79,36 +79,6 @@
{
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())
@@ -137,6 +107,35 @@
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);
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]