Author: kgiusti
Date: Thu Feb  2 23:46:35 2012
New Revision: 1239939

URL: http://svn.apache.org/viewvc?rev=1239939&view=rev
Log:
QPID-3804: do not skip released grouped messages

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/MessageGroupManager.cpp
    qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/MessageGroupManager.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/MessageGroupManager.cpp?rev=1239939&r1=1239938&r2=1239939&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/MessageGroupManager.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/MessageGroupManager.cpp Thu Feb  2 
23:46:35 2012
@@ -210,7 +210,7 @@ bool MessageGroupManager::nextConsumable
     next.position = c->getPosition();
     if (!freeGroups.empty()) {
         const framing::SequenceNumber& nextFree = freeGroups.begin()->first;
-        if (nextFree < next.position) {     // a free message is older than 
current
+        if (nextFree <= next.position) {  // take oldest free
             next.position = nextFree;
             --next.position;
         }

Modified: qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py?rev=1239939&r1=1239938&r2=1239939&view=diff
==============================================================================
--- qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py (original)
+++ qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py Thu Feb  
2 23:46:35 2012
@@ -1068,6 +1068,55 @@ class MultiConsumerMsgGroupTests(Base):
         self.qmf_session.delBroker(self.qmf_broker)
 
 
+    def test_transaction_order(self):
+        """ Verify that rollback does not reorder the messages with respect to
+        the consumer (QPID-3804)
+        """
+        snd = self.ssn.sender("msg-group-q; {create:always, delete:sender," +
+                              " node: {x-declare: {arguments:" +
+                              " {'qpid.group_header_key':'THE-GROUP'," +
+                              "'qpid.shared_msg_group':1}}}}")
+
+        groups = ["A","B","A"]
+        messages = [Message(content={}, properties={"THE-GROUP": g}) for g in 
groups]
+        index = 0
+        for m in messages:
+            m.content['index'] = index
+            index += 1
+            snd.send(m)
+
+        s1 = self.conn.session(transactional=True)
+        c1 = s1.receiver("msg-group-q", options={"capacity":0})
+
+        # C1 gets group A
+        m1 = c1.fetch(0)
+        assert m1.properties['THE-GROUP'] == 'A'
+        assert m1.content['index'] == 0
+        s1.acknowledge(m1)
+
+        s1.rollback()  # release A back to the queue
+
+        # the order should be preserved as follows:
+
+        m1 = c1.fetch(0)
+        assert m1.properties['THE-GROUP'] == 'A'
+        assert m1.content['index'] == 0
+
+        m2 = c1.fetch(0)
+        assert m2.properties['THE-GROUP'] == 'B'
+        assert m2.content['index'] == 1
+
+        m3 = c1.fetch(0)
+        assert m3.properties['THE-GROUP'] == 'A'
+        assert m3.content['index'] == 2
+
+        s1.commit()
+
+        c1.close()
+        s1.close()
+        snd.close()
+
+
 class StickyConsumerMsgGroupTests(Base):
     """
     Tests for the behavior of sticky-consumer message groups.  These tests



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to