You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by cc...@apache.org on 2009/07/10 21:42:16 UTC

svn commit: r793091 - in /qpid/trunk/qpid/cpp/src: qpid/broker/MessageBuilder.cpp tests/MessageBuilderTest.cpp

Author: cctrieloff
Date: Fri Jul 10 19:42:16 2009
New Revision: 793091

URL: http://svn.apache.org/viewvc?rev=793091&view=rev
Log:

Correct the case where for very low ( bytes) staging threshhold management
could get disabled. Fix prevents the staging of management messages + test


Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/MessageBuilder.cpp
    qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/MessageBuilder.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/MessageBuilder.cpp?rev=793091&r1=793090&r2=793091&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/MessageBuilder.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/MessageBuilder.cpp Fri Jul 10 19:42:16 2009
@@ -37,6 +37,8 @@
 MessageBuilder::MessageBuilder(MessageStore* const _store, uint64_t _stagingThreshold) : 
     state(DORMANT), store(_store), stagingThreshold(_stagingThreshold), staging(false) {}
 
+static const std::string QPID_MANAGEMENT("qpid.management");
+
 void MessageBuilder::handle(AMQFrame& frame)
 {
     uint8_t type = frame.getBody()->type();
@@ -75,7 +77,8 @@
         if (state == CONTENT 
             && stagingThreshold 
             && message->getFrames().getContentSize() >= stagingThreshold
-            && !NullMessageStore::isNullStore(store)) 
+            && !NullMessageStore::isNullStore(store)
+            && message->getExchangeName() != QPID_MANAGEMENT /* don't stage mgnt messages */)   
         {
             message->releaseContent(store); 
             staging = true;

Modified: qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp?rev=793091&r1=793090&r2=793091&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/MessageBuilderTest.cpp Fri Jul 10 19:42:16 2009
@@ -217,4 +217,29 @@
     BOOST_CHECK(!builder.getMessage()->isContentLoaded());
 }
 
+QPID_AUTO_TEST_CASE(testNoManagementStaging)
+{
+    // Make sure management messages don't stage
+    MockMessageStore store;
+    MessageBuilder builder(&store, 5);
+    builder.start(SequenceNumber());
+        
+    std::string data1("abcdefg");
+    std::string exchange("qpid.management");
+    std::string key("builder-exchange");
+
+    AMQFrame method(MessageTransferBody(ProtocolVersion(), exchange, 0, 0));
+    AMQFrame header((AMQHeaderBody()));
+    AMQFrame content1((AMQContentBody(data1)));
+
+    header.castBody<AMQHeaderBody>()->get<MessageProperties>(true)->setContentLength(data1.size());        
+    header.castBody<AMQHeaderBody>()->get<DeliveryProperties>(true)->setRoutingKey(key);
+
+    builder.handle(method);
+    builder.handle(header);
+
+    builder.handle(content1);
+    BOOST_CHECK(store.expectationsMet());
+    BOOST_CHECK_EQUAL((uint64_t) 0, builder.getMessage()->getPersistenceId());
+}
 QPID_AUTO_TEST_SUITE_END()



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