Author: cctrieloff Date: Mon Jan 19 11:25:29 2009 New Revision: 735776 URL: http://svn.apache.org/viewvc?rev=735776&view=rev Log: Put messages into LVQ FIFO if no key is specified.
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp 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=735776&r1=735775&r2=735776&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Mon Jan 19 11:25:29 2009 @@ -206,8 +206,8 @@ } void Queue::clearLVQIndex(const QueuedMessage& msg){ - if (lastValueQueue){ - const framing::FieldTable* ft = msg.payload->getApplicationHeaders(); + const framing::FieldTable* ft = msg.payload->getApplicationHeaders(); + if (lastValueQueue && ft){ string key = ft->getAsString(qpidVQMatchProperty); lvq.erase(key); } @@ -512,8 +512,8 @@ void Queue::popMsg(QueuedMessage& qmsg) { - if (lastValueQueue){ - const framing::FieldTable* ft = qmsg.payload->getApplicationHeaders(); + const framing::FieldTable* ft = qmsg.payload->getApplicationHeaders(); + if (lastValueQueue && ft){ string key = ft->getAsString(qpidVQMatchProperty); lvq.erase(key); } @@ -529,15 +529,15 @@ if (policy.get()) policy->tryEnqueue(qm); LVQ::iterator i; - if (lastValueQueue){ - const framing::FieldTable* ft = msg->getApplicationHeaders(); + const framing::FieldTable* ft = msg->getApplicationHeaders(); + if (lastValueQueue && ft){ string key = ft->getAsString(qpidVQMatchProperty); i = lvq.find(key); if (i == lvq.end()){ messages.push_back(qm); listeners.populate(copy); - lvq[key] = msg; + lvq[key] = msg; }else { i->second->setReplacementMessage(msg,this); dequeued(QueuedMessage(qm.queue, i->second, qm.position)); Modified: qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp?rev=735776&r1=735775&r2=735776&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp (original) +++ qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp Mon Jan 19 11:25:29 2009 @@ -356,6 +356,30 @@ } +QPID_AUTO_TEST_CASE(testLVQEmptyKey){ + + client::QueueOptions args; + // set queue mode + args.setOrdering(client::LVQ); + + Queue::shared_ptr queue(new Queue("my-queue", true )); + queue->configure(args); + + intrusive_ptr<Message> msg1 = create_message("e", "A"); + intrusive_ptr<Message> msg2 = create_message("e", "B"); + + string key; + args.getLVQKey(key); + BOOST_CHECK_EQUAL(key, "qpid.LVQ_key"); + + + msg1->getProperties<MessageProperties>()->getApplicationHeaders().setString(key,"a"); + queue->deliver(msg1); + queue->deliver(msg2); + BOOST_CHECK_EQUAL(queue->getMessageCount(), 2u); + +} + QPID_AUTO_TEST_CASE(testLVQAcquire){ client::QueueOptions args; --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org