You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2011/03/07 13:51:55 UTC

svn commit: r1078763 - in /qpid/trunk/qpid: cpp/src/qpid/broker/Queue.cpp tests/src/py/qpid_tests/broker_0_10/management.py

Author: gsim
Date: Mon Mar  7 12:51:55 2011
New Revision: 1078763

URL: http://svn.apache.org/viewvc?rev=1078763&view=rev
Log:
QPID-3120: Consult alternate exchange on reroute if needed

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
    qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/management.py

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=1078763&r1=1078762&r2=1078763&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Mon Mar  7 12:51:55 2011
@@ -484,8 +484,7 @@ uint32_t Queue::purge(const uint32_t pur
     while (!rerouteQueue.empty()) {
         DeliverableMessage msg(rerouteQueue.front());
         rerouteQueue.pop_front();
-        dest->route(msg, msg.getMessage().getRoutingKey(),
-                    msg.getMessage().getApplicationHeaders());
+        dest->routeWithAlternate(msg);
     }
 
     return count;

Modified: qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/management.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/management.py?rev=1078763&r1=1078762&r2=1078763&view=diff
==============================================================================
--- qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/management.py (original)
+++ qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/management.py Mon Mar  7 12:51:55 2011
@@ -341,7 +341,40 @@ class ManagementTest (TestBase010):
         self.assertEqual(result.status, 0) 
         pq.update()
         self.assertEqual(pq.msgDepth,20)
-        
+
+    def test_reroute_alternate_exchange(self):
+        """
+        Test that when rerouting, the alternate-exchange is considered if relevant
+        """
+        self.startQmf()
+        session = self.session
+        # 1. Create 2 exchanges A and B (fanout) where B is the
+        # alternate exchange for A
+        session.exchange_declare(exchange="B", type="fanout")
+        session.exchange_declare(exchange="A", type="fanout", alternate_exchange="B")
+
+        # 2. Bind queue X to B
+        session.queue_declare(queue="X", exclusive=True, auto_delete=True)
+        session.exchange_bind(queue="X", exchange="B")
+
+        # 3. Send 1 message to queue Y
+        session.queue_declare(queue="Y", exclusive=True, auto_delete=True)
+        props = session.delivery_properties(routing_key="Y")
+        session.message_transfer(message=Message(props, "reroute me!"))
+
+        # 4. Call reroute on queue Y and specify that messages should
+        # be sent to exchange A
+        y = self.qmf.getObjects(_class="queue", name="Y")[0]
+        result = y.reroute(1, False, "A")
+        self.assertEqual(result.status, 0)
+
+        # 5. verify that the message is rerouted through B (as A has
+        # no matching bindings) to X
+        self.subscribe(destination="x", queue="X")
+        self.assertEqual("reroute me!", session.incoming("x").get(timeout=1).body)
+
+        # Cleanup
+        for e in ["A", "B"]: session.exchange_delete(exchange=e)
 
     def test_methods_async (self):
         """



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org