Author: tross
Date: Wed Jun 13 20:32:36 2012
New Revision: 1350003

URL: http://svn.apache.org/viewvc?rev=1350003&view=rev
Log:
QPID-4065 - Remove the message's trace list during Queue::reRoute

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/Message.h
    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/Message.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp?rev=1350003&r1=1350002&r2=1350003&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp Wed Jun 13 20:32:36 2012
@@ -384,6 +384,18 @@ void Message::addTraceId(const std::stri
     }
 }
 
+void Message::clearTrace()
+{
+    sys::Mutex::ScopedLock l(lock);
+    if (isA<MessageTransferBody>()) {
+        FieldTable& headers = 
getModifiableProperties<MessageProperties>()->getApplicationHeaders();
+        std::string trace = headers.getAsString(X_QPID_TRACE);
+        if (!trace.empty()) {
+            headers.setString(X_QPID_TRACE, "");
+        }
+    }
+}
+
 void Message::setTimestamp()
 {
     sys::Mutex::ScopedLock l(lock);

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Message.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Message.h?rev=1350003&r1=1350002&r2=1350003&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Message.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Message.h Wed Jun 13 20:32:36 2012
@@ -161,6 +161,7 @@ public:
 
     bool isExcluded(const std::vector<std::string>& excludes) const;
     void addTraceId(const std::string& id);
+    void clearTrace();
 
     void forcePersistent();
     bool isForcedPersistent();

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=1350003&r1=1350002&r2=1350003&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Wed Jun 13 20:32:36 2012
@@ -809,6 +809,7 @@ uint32_t Queue::purge(const uint32_t pur
             // now reroute if necessary
             if (dest.get()) {
                 assert(qmsg->payload);
+                qmsg->payload->clearTrace();
                 DeliverableMessage dmsg(qmsg->payload);
                 dest->routeWithAlternate(dmsg);
             }

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=1350003&r1=1350002&r2=1350003&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 Wed Jun 
13 20:32:36 2012
@@ -302,9 +302,10 @@ class ManagementTest (TestBase010):
 
         twenty = range(1,21)
         props = session.delivery_properties(routing_key="routing_key")
+        mp    = session.message_properties(application_headers={'x-qpid.trace' 
: 'A,B,C'})
         for count in twenty:
             body = "Reroute Message %d" % count
-            msg = Message(props, body)
+            msg = Message(props, mp, body)
             session.message_transfer(destination="amq.direct", message=msg)
 
         pq = self.qmf.getObjects(_class="queue", name="reroute-queue")[0]
@@ -317,6 +318,16 @@ class ManagementTest (TestBase010):
         self.assertEqual(pq.msgDepth,19)
         self.assertEqual(aq.msgDepth,1)
 
+        "Verify that the trace was cleared on the rerouted message"
+        url = "%s://%s:%d" % (self.broker.scheme or "amqp", self.broker.host, 
self.broker.port)
+        conn = qpid.messaging.Connection(url)
+        conn.open()
+        sess = conn.session()
+        rx = sess.receiver("alt-queue1;{mode:browse}")
+        rm = rx.fetch(1)
+        self.assertEqual(rm.properties['x-qpid.trace'], '')
+        conn.close()
+
         "Reroute top 9 messages from reroute-queue to alt.direct2"
         result = pq.reroute(9, False, "alt.direct2", {})
         self.assertEqual(result.status, 0) 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to