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