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]

Reply via email to