summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2011-10-19 21:27:23 +0000
committerAlan Conway <aconway@apache.org>2011-10-19 21:27:23 +0000
commit84c575a2038002201f1e927a6d05fa610a017269 (patch)
treea5ebeb07685fbbcf5722e6a2483a2f5806a22c0f
parent92010107561eed9051b0a4020068b9aced0f2e97 (diff)
downloadqpid-python-84c575a2038002201f1e927a6d05fa610a017269.tar.gz
QPID-2920: Replace RwLock with Mutex in cluster::LockedMap.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qpid-2920-active@1186499 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp9
-rw-r--r--qpid/cpp/src/qpid/cluster/exp/LockedMap.h25
-rw-r--r--qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp5
-rw-r--r--qpid/cpp/src/qpid/cluster/exp/QueueContext.h2
-rw-r--r--qpid/cpp/src/qpid/cluster/exp/QueueHandler.h1
5 files changed, 15 insertions, 27 deletions
diff --git a/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp b/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp
index ed02d35d73..dc10548f80 100644
--- a/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp
+++ b/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp
@@ -64,15 +64,18 @@ void EventHandler::deliver(
framing::AMQFrame frame;
// FIXME aconway 2011-09-29: don't decode own frame bodies. Ignore based on channel.
while (buf.available()) {
+ // FIXME aconway 2011-10-19: multi-version, skip unrecognized frames.
frame.decode(buf);
QPID_LOG(trace, "cluster: deliver on " << cpg.getName()
<< " from "<< PrettyId(sender, self) << ": " << frame);
try {
handle(frame);
} catch (const std::exception& e) {
- // Non-fatal error. Our state isn't compromized by receiving bad frames.
- QPID_LOG(error, "cluster: error in deliver on " << cpg.getName()
- << " from " << PrettyId(sender, self) << ": " << frame);
+ // FIXME aconway 2011-10-19: error handling.
+ QPID_LOG(error, "cluster: error in deliver on " << cpg.getName()
+ << " from " << PrettyId(sender, self)
+ << ": " << frame
+ << ": " << e.what());
}
}
}
diff --git a/qpid/cpp/src/qpid/cluster/exp/LockedMap.h b/qpid/cpp/src/qpid/cluster/exp/LockedMap.h
index cacb9c792c..ced9c24967 100644
--- a/qpid/cpp/src/qpid/cluster/exp/LockedMap.h
+++ b/qpid/cpp/src/qpid/cluster/exp/LockedMap.h
@@ -37,27 +37,14 @@ class LockedMap
public:
/** Get value associated with key, returns Value() if none. */
Value get(const Key& key) const {
- sys::RWlock::ScopedRlock r(lock);
+ sys::Mutex::ScopedLock r(lock);
typename Map::const_iterator i = map.find(key);
return (i == map.end()) ? Value() : i->second;
}
- /** Update value with the value for key.
- *@return true if key was found.
- */
- bool get(const Key& key, Value& value) const {
- sys::RWlock::ScopedRlock r(lock);
- typename Map::const_iterator i = map.find(key);
- if (i != map.end()) {
- value = i->second;
- return true;
- }
- return false;
- }
-
/** Associate value with key, overwriting any previous value for key. */
void put(const Key& key, const Value& value) {
- sys::RWlock::ScopedWlock w(lock);
+ sys::Mutex::ScopedLock w(lock);
map[key] = value;
}
@@ -65,19 +52,19 @@ class LockedMap
* Returns true if the value was added.
*/
bool add(const Key& key, const Value& value) {
- sys::RWlock::ScopedWlock w(lock);
+ sys::Mutex::ScopedLock w(lock);
return map.insert(std::make_pair(key, value)).second;
}
/** Erase the value associated with key if any. Return true if a value was erased. */
bool erase(const Key& key) {
- sys::RWlock::ScopedWlock w(lock);
+ sys::Mutex::ScopedLock w(lock);
return map.erase(key);
}
/** Remove and return value associated with key, returns Value() if none. */
Value pop(const Key& key) {
- sys::RWlock::ScopedWlock w(lock);
+ sys::Mutex::ScopedLock w(lock);
Value value;
typename Map::iterator i = map.find(key);
if (i != map.end()) {
@@ -90,7 +77,7 @@ class LockedMap
private:
typedef std::map<Key, Value> Map;
Map map;
- mutable sys::RWlock lock;
+ mutable sys::Mutex lock;
};
}} // namespace qpid::cluster
diff --git a/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp b/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp
index ece3e0f2c1..b8bdb2aa07 100644
--- a/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp
+++ b/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp
@@ -124,9 +124,8 @@ void QueueContext::stopped() {
void QueueContext::requeue(uint32_t position, bool redelivered) {
// No lock, unacked has its own lock.
- broker::QueuedMessage qm;
- if (unacked.get(position, qm)) {
- unacked.erase(position);
+ broker::QueuedMessage qm = unacked.pop(position);
+ if (qm.queue) {
if (redelivered) qm.payload->redeliver();
BrokerContext::ScopedSuppressReplication ssr;
queue.requeue(qm);
diff --git a/qpid/cpp/src/qpid/cluster/exp/QueueContext.h b/qpid/cpp/src/qpid/cluster/exp/QueueContext.h
index 691e11ebe7..a37225e64e 100644
--- a/qpid/cpp/src/qpid/cluster/exp/QueueContext.h
+++ b/qpid/cpp/src/qpid/cluster/exp/QueueContext.h
@@ -99,7 +99,7 @@ private:
size_t consumers;
size_t hash;
- typedef LockedMap<uint32_t, broker::QueuedMessage> UnackedMap; // FIXME aconway 2011-09-15: don't need read/write map? Rename
+ typedef LockedMap<uint32_t, broker::QueuedMessage> UnackedMap;
UnackedMap unacked;
};
diff --git a/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h b/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h
index a4898e9a4c..ecb9ba7821 100644
--- a/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h
+++ b/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h
@@ -23,7 +23,6 @@
*/
#include "HandlerBase.h"
-#include "LockedMap.h"
#include "Settings.h"
#include "qpid/framing/AMQP_AllOperations.h"
#include "boost/shared_ptr.hpp"