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);
-
}
};