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-subscr...@qpid.apache.org