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