diff options
author | Alan Conway <aconway@apache.org> | 2012-06-12 21:21:09 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2012-06-12 21:21:09 +0000 |
commit | 2bb43aedeb59eaa9eaf79407ba8fb80f934d632e (patch) | |
tree | 731597e12dbe4ce54ba721781e70ae9a3ed42f75 /qpid/cpp/src/qpid/ha/Membership.cpp | |
parent | 314095b5a1f0eeaaafad301954e2137ff543e9a7 (diff) | |
download | qpid-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.cpp | 15 |
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 |