You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2007/02/14 17:58:53 UTC

svn commit: r507622 - in /incubator/qpid/branches/qpid.0-9/cpp: lib/broker/AccumulatedAck.cpp lib/client/ClientChannel.cpp lib/client/ClientQueue.cpp lib/client/ClientQueue.h tests/AccumulatedAckTest.cpp

Author: gsim
Date: Wed Feb 14 08:58:52 2007
New Revision: 507622

URL: http://svn.apache.org/viewvc?view=rev&rev=507622
Log:
Added durability property to queues and pass this to broker on declare. (This change also applied on trunk)

Minor update of accumulated ack and test.


Modified:
    incubator/qpid/branches/qpid.0-9/cpp/lib/broker/AccumulatedAck.cpp
    incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientChannel.cpp
    incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.cpp
    incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.h
    incubator/qpid/branches/qpid.0-9/cpp/tests/AccumulatedAckTest.cpp

Modified: incubator/qpid/branches/qpid.0-9/cpp/lib/broker/AccumulatedAck.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/qpid.0-9/cpp/lib/broker/AccumulatedAck.cpp?view=diff&rev=507622&r1=507621&r2=507622
==============================================================================
--- incubator/qpid/branches/qpid.0-9/cpp/lib/broker/AccumulatedAck.cpp (original)
+++ incubator/qpid/branches/qpid.0-9/cpp/lib/broker/AccumulatedAck.cpp Wed Feb 14 08:58:52 2007
@@ -27,12 +27,12 @@
 using namespace qpid::broker;
 
 void AccumulatedAck::update(u_int64_t firstTag, u_int64_t lastTag){
-	assert(firstTag<=lastTag);
-    if (firstTag <= range+1) {
-    	range = lastTag;
+    assert(firstTag<=lastTag);
+    if (firstTag <= range + 1) {
+        if (lastTag > range) range = lastTag;
     } else {
     	for (u_int64_t tag = firstTag; tag<=lastTag; tag++)
-        	individual.push_back(tag);
+            individual.push_back(tag);
     }
 }
 
@@ -40,6 +40,11 @@
     individual.sort();
     //remove any individual tags that are covered by range
     individual.remove_if(bind2nd(less_equal<u_int64_t>(), range));
+    //update range if possible (using <= allows for duplicates from overlapping ranges)
+    while (individual.front() <= range + 1) {
+        range = individual.front();
+        individual.pop_front();
+    }
 }
 
 void AccumulatedAck::clear(){

Modified: incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientChannel.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientChannel.cpp?view=diff&rev=507622&r1=507621&r2=507622
==============================================================================
--- incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientChannel.cpp (original)
+++ incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientChannel.cpp Wed Feb 14 08:58:52 2007
@@ -159,7 +159,7 @@
     sendAndReceiveSync<QueueDeclareOkBody>(
         synch,
         new QueueDeclareBody(
-            version, 0, name, false, false, 
+            version, 0, name, false/*passive*/, queue.isDurable(),
             queue.isExclusive(), queue.isAutoDelete(), !synch, args));        
     if (synch) {
         if(queue.getName().length() == 0){

Modified: incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.cpp?view=diff&rev=507622&r1=507621&r2=507622
==============================================================================
--- incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.cpp (original)
+++ incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.cpp Wed Feb 14 08:58:52 2007
@@ -20,14 +20,14 @@
  */
 #include <ClientQueue.h>
 
-qpid::client::Queue::Queue() : name(""), autodelete(true), exclusive(true){}
+qpid::client::Queue::Queue() : name(""), autodelete(true), exclusive(true), durable(false){}
 
-qpid::client::Queue::Queue(std::string _name) : name(_name), autodelete(false), exclusive(false){}
+qpid::client::Queue::Queue(std::string _name) : name(_name), autodelete(false), exclusive(false), durable(false){}
 
-qpid::client::Queue::Queue(std::string _name, bool temp) : name(_name), autodelete(temp), exclusive(temp){}
+qpid::client::Queue::Queue(std::string _name, bool temp) : name(_name), autodelete(temp), exclusive(temp), durable(false){}
 
-qpid::client::Queue::Queue(std::string _name, bool _autodelete, bool _exclusive) 
-  : name(_name), autodelete(_autodelete), exclusive(_exclusive){}
+qpid::client::Queue::Queue(std::string _name, bool _autodelete, bool _exclusive, bool _durable) 
+    : name(_name), autodelete(_autodelete), exclusive(_exclusive), durable(_durable){}
 
 const std::string& qpid::client::Queue::getName() const{
     return name;
@@ -43,6 +43,14 @@
 
 bool qpid::client::Queue::isExclusive() const{
     return exclusive;
+}
+
+bool qpid::client::Queue::isDurable() const{
+    return durable;
+}
+
+void qpid::client::Queue::setDurable(bool _durable){
+    durable = _durable;
 }
 
 

Modified: incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.h
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.h?view=diff&rev=507622&r1=507621&r2=507622
==============================================================================
--- incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.h (original)
+++ incubator/qpid/branches/qpid.0-9/cpp/lib/client/ClientQueue.h Wed Feb 14 08:58:52 2007
@@ -55,24 +55,25 @@
 	std::string name;
         const bool autodelete;
         const bool exclusive;
+        bool durable;
 
     public:
 
         /**
-         * Creates an unnamed, temporary queue. A name will be
-         * assigned to this queue instance by a call to
+         * Creates an unnamed, non-durable, temporary queue. A name
+         * will be assigned to this queue instance by a call to
          * Channel::declareQueue().
          */
 	Queue();
         /**
-         * Creates a shared queue with a given name, that will not be
-         * autodeleted.
+         * Creates a shared, non-durable, queue with a given name,
+         * that will not be autodeleted.
          * 
          * @param name the name of the queue
          */
 	Queue(std::string name);
         /**
-         * Creates a queue with a given name.
+         * Creates a non-durable queue with a given name.
          * 
          * @param name the name of the queue
          * 
@@ -81,17 +82,19 @@
          */
 	Queue(std::string name, bool temp);
         /**
-         * This constructor allows the autodelete and exclusive
-         * propeties to be explictly set. Note however that if
+         * This constructor allows the autodelete, exclusive and
+         * durable propeties to be explictly set. Note however that if
          * exclusive is true, autodelete has no meaning as exclusive
          * queues are always destroyed when the connection that
          * created them is closed.
          */
-	Queue(std::string name, bool autodelete, bool exclusive);
+	Queue(std::string name, bool autodelete, bool exclusive, bool durable);
 	const std::string& getName() const;
 	void setName(const std::string&);
         bool isAutoDelete() const;
         bool isExclusive() const;
+        bool isDurable() const;
+        void setDurable(bool durable);
     };
 
 }

Modified: incubator/qpid/branches/qpid.0-9/cpp/tests/AccumulatedAckTest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/qpid.0-9/cpp/tests/AccumulatedAckTest.cpp?view=diff&rev=507622&r1=507621&r2=507622
==============================================================================
--- incubator/qpid/branches/qpid.0-9/cpp/tests/AccumulatedAckTest.cpp (original)
+++ incubator/qpid/branches/qpid.0-9/cpp/tests/AccumulatedAckTest.cpp Wed Feb 14 08:58:52 2007
@@ -29,11 +29,38 @@
 class AccumulatedAckTest : public CppUnit::TestCase  
 {
         CPPUNIT_TEST_SUITE(AccumulatedAckTest);
+        CPPUNIT_TEST(testGeneral);
         CPPUNIT_TEST(testCovers);
         CPPUNIT_TEST(testUpdateAndConsolidate);
         CPPUNIT_TEST_SUITE_END();
 
     public:
+        void testGeneral()
+        {
+            AccumulatedAck ack;
+            ack.clear();
+            ack.update(3,3);
+            ack.update(7,7);
+            ack.update(9,9);
+            ack.update(1,2);
+            ack.update(4,5);
+            ack.update(6,6);
+
+            for(int i = 1; i <= 7; i++) CPPUNIT_ASSERT(ack.covers(i));
+            CPPUNIT_ASSERT(ack.covers(9));
+
+            CPPUNIT_ASSERT(!ack.covers(8));
+            CPPUNIT_ASSERT(!ack.covers(10));
+
+            ack.consolidate();
+
+            for(int i = 1; i <= 7; i++) CPPUNIT_ASSERT(ack.covers(i));
+            CPPUNIT_ASSERT(ack.covers(9));
+
+            CPPUNIT_ASSERT(!ack.covers(8));
+            CPPUNIT_ASSERT(!ack.covers(10));
+        }
+
         void testCovers()
         {
             AccumulatedAck ack;
@@ -67,15 +94,12 @@
             ack.update(2, 2);
             ack.update(0, 5);
             ack.consolidate();
-            CPPUNIT_ASSERT_EQUAL((u_int64_t) 5, ack.range);
-            CPPUNIT_ASSERT_EQUAL((size_t) 3, ack.individual.size());
+            CPPUNIT_ASSERT_EQUAL((u_int64_t) 6, ack.range);
+            CPPUNIT_ASSERT_EQUAL((size_t) 2, ack.individual.size());
             list<u_int64_t>::iterator i = ack.individual.begin();
-            CPPUNIT_ASSERT_EQUAL((u_int64_t) 6, *i);
-            i++;
             CPPUNIT_ASSERT_EQUAL((u_int64_t) 8, *i);
             i++;
             CPPUNIT_ASSERT_EQUAL((u_int64_t) 10, *i);
-
         }
 };