You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2008/11/26 22:13:06 UTC
svn commit: r720979 - in /incubator/qpid/trunk/qpid/cpp/src/qpid:
broker/Queue.cpp broker/QueuePolicy.cpp broker/QueuePolicy.h
sys/AtomicValue_mutex.h
Author: aconway
Date: Wed Nov 26 13:13:05 2008
New Revision: 720979
URL: http://svn.apache.org/viewvc?rev=720979&view=rev
Log:
Was causing cluster failures.
QPID-1488 Mick Goulish: QueuePolicy serialization fix for cluster braindump.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.h
incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AtomicValue_mutex.h
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=720979&r1=720978&r2=720979&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Wed Nov 26 13:13:05 2008
@@ -741,11 +741,12 @@
{
buffer.putShortString(name);
buffer.put(settings);
+ buffer.put(*policy);
}
uint32_t Queue::encodedSize() const
{
- return name.size() + 1/*short string size octet*/ + settings.encodedSize();
+ return name.size() + 1/*short string size octet*/ + settings.encodedSize() + (*policy).encodedSize();
}
Queue::shared_ptr Queue::decode(QueueRegistry& queues, Buffer& buffer)
@@ -755,6 +756,7 @@
std::pair<Queue::shared_ptr, bool> result = queues.declare(name, true);
buffer.get(result.first->settings);
result.first->configure(result.first->settings);
+ buffer.get ( *(result.first->policy) );
return result.first;
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.cpp?rev=720979&r1=720978&r2=720979&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.cpp Wed Nov 26 13:13:05 2008
@@ -121,6 +121,36 @@
defaultMaxSize = s;
}
+
+
+
+
+void QueuePolicy::encode(Buffer& buffer) const
+{
+ buffer.putLong(maxCount);
+ buffer.putLongLong(maxSize);
+ buffer.putLong(count.get());
+ buffer.putLongLong(size.get());
+}
+
+void QueuePolicy::decode ( Buffer& buffer )
+{
+ maxCount = buffer.getLong();
+ maxSize = buffer.getLongLong();
+ count = buffer.getLong();
+ size = buffer.getLongLong();
+}
+
+
+uint32_t QueuePolicy::encodedSize() const {
+ return sizeof(uint32_t) + // maxCount
+ sizeof(uint64_t) + // maxSize
+ sizeof(uint32_t) + // count
+ sizeof(uint64_t); // size
+}
+
+
+
const std::string QueuePolicy::maxCountKey("qpid.max_count");
const std::string QueuePolicy::maxSizeKey("qpid.max_size");
const std::string QueuePolicy::typeKey("qpid.policy_type");
@@ -231,8 +261,7 @@
}
}
-
-
+
namespace qpid {
namespace broker {
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.h?rev=720979&r1=720978&r2=720979&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/QueuePolicy.h Wed Nov 26 13:13:05 2008
@@ -36,8 +36,8 @@
{
static uint64_t defaultMaxSize;
- const uint32_t maxCount;
- const uint64_t maxSize;
+ uint32_t maxCount;
+ uint64_t maxSize;
const std::string type;
qpid::sys::AtomicValue<uint32_t> count;
qpid::sys::AtomicValue<uint64_t> size;
@@ -63,6 +63,10 @@
void update(qpid::framing::FieldTable& settings);
uint32_t getMaxCount() const { return maxCount; }
uint64_t getMaxSize() const { return maxSize; }
+ void encode(framing::Buffer& buffer) const;
+ void decode ( framing::Buffer& buffer );
+ uint32_t encodedSize() const;
+
static std::auto_ptr<QueuePolicy> createQueuePolicy(const qpid::framing::FieldTable& settings);
static std::auto_ptr<QueuePolicy> createQueuePolicy(uint32_t maxCount, uint64_t maxSize, const std::string& type = REJECT);
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AtomicValue_mutex.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AtomicValue_mutex.h?rev=720979&r1=720978&r2=720979&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AtomicValue_mutex.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AtomicValue_mutex.h Wed Nov 26 13:13:05 2008
@@ -53,6 +53,8 @@
inline T operator++(int) { return fetchAndAdd(1); }
inline T operator--(int) { return fetchAndSub(1); }
+ AtomicValue& operator=(T newval) { Lock l(lock); value = newval; return *this; }
+
/** If current value == testval then set to newval. Returns the old value. */
T valueCompareAndSwap(T testval, T newval) {
Lock l(lock);