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

Reply via email to