summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/qpid/ha/Membership.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2012-06-12 21:21:09 +0000
committerAlan Conway <aconway@apache.org>2012-06-12 21:21:09 +0000
commit2bb43aedeb59eaa9eaf79407ba8fb80f934d632e (patch)
tree731597e12dbe4ce54ba721781e70ae9a3ed42f75 /qpid/cpp/src/qpid/ha/Membership.cpp
parent314095b5a1f0eeaaafad301954e2137ff543e9a7 (diff)
downloadqpid-python-2bb43aedeb59eaa9eaf79407ba8fb80f934d632e.tar.gz
QPID-3603: HA bug fixes around transition to ready status
- Simplify QueueGuard::firstSafe calculation. - Fix error in setting initial queues - was not checking if replicated. - Send ready status to backups. Tests hang, deadlock in opened()->RemoteBackup on primary? - Fix deadlock in QueueGuard. - Don't start guards inside ConnectionObserver::opened. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1349547 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/qpid/ha/Membership.cpp')
-rw-r--r--qpid/cpp/src/qpid/ha/Membership.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/qpid/cpp/src/qpid/ha/Membership.cpp b/qpid/cpp/src/qpid/ha/Membership.cpp
index 92436c9e56..34c1ccb657 100644
--- a/qpid/cpp/src/qpid/ha/Membership.cpp
+++ b/qpid/cpp/src/qpid/ha/Membership.cpp
@@ -43,7 +43,7 @@ void Membership::add(const BrokerInfo& b) {
void Membership::remove(const types::Uuid& id) {
sys::Mutex::ScopedLock l(lock);
- BrokerMap::iterator i = brokers.find(id);
+ BrokerInfo::Map::iterator i = brokers.find(id);
if (i != brokers.end()) {
brokers.erase(i);
update(l);
@@ -72,7 +72,7 @@ types::Variant::List Membership::asList() const {
types::Variant::List Membership::asList(sys::Mutex::ScopedLock&) const {
types::Variant::List list;
- for (BrokerMap::const_iterator i = brokers.begin(); i != brokers.end(); ++i)
+ for (BrokerInfo::Map::const_iterator i = brokers.begin(); i != brokers.end(); ++i)
list.push_back(i->second.asMap());
return list;
}
@@ -81,8 +81,6 @@ void Membership::update(sys::Mutex::ScopedLock& l) {
if (updateCallback) {
types::Variant::List list = asList(l);
sys::Mutex::ScopedUnlock u(lock);
- // FIXME aconway 2012-06-06: messy: Make this a data object,
- // move locking into HaBroker?
updateCallback(list);
}
QPID_LOG(debug, " HA: Membership update: " << brokers);
@@ -95,11 +93,18 @@ BrokerInfo::Set Membership::otherBackups() const {
BrokerInfo::Set Membership::otherBackups(sys::Mutex::ScopedLock&) const {
BrokerInfo::Set result;
- for (BrokerMap::const_iterator i = brokers.begin(); i != brokers.end(); ++i)
+ for (BrokerInfo::Map::const_iterator i = brokers.begin(); i != brokers.end(); ++i)
if (isBackup(i->second.getStatus()) && i->second.getSystemId() != self)
result.insert(i->second);
return result;
}
+bool Membership::get(const types::Uuid& id, BrokerInfo& result) {
+ sys::Mutex::ScopedLock l(lock);
+ BrokerInfo::Map::iterator i = brokers.find(id);
+ if (i == brokers.end()) return false;
+ result = i->second;
+ return true;
+}
}} // namespace qpid::ha