From 41d33af55b9fbf4c664ccb56accb1a37bd1ef006 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Tue, 7 Oct 2008 17:27:06 +0000 Subject: broker: Fixed incorrect pass-by-reference of Queue::shared_ptr in several files. cluster: added FailoverExchange - send cluster membership to clients. client: added FailoverListener - receive cluster updates from failover exchange. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@702552 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/cluster/ClusterMap.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'cpp/src/qpid/cluster/ClusterMap.cpp') diff --git a/cpp/src/qpid/cluster/ClusterMap.cpp b/cpp/src/qpid/cluster/ClusterMap.cpp index f3b5451afb..e2fc25bfaa 100644 --- a/cpp/src/qpid/cluster/ClusterMap.cpp +++ b/cpp/src/qpid/cluster/ClusterMap.cpp @@ -72,18 +72,20 @@ ClusterMap::ClusterMap(const FieldTable& newbiesFt, const FieldTable& membersFt) std::for_each(members.begin(), members.end(), boost::bind(&insertSet, boost::ref(alive), _1)); } -void ClusterMap::configChange( +bool ClusterMap::configChange( cpg_address *current, int nCurrent, cpg_address *left, int nLeft, cpg_address */*joined*/, int /*nJoined*/) { cpg_address* a; + bool memberChange=false; for (a = left; a != left+nLeft; ++a) { - members.erase(*a); + memberChange = members.erase(*a); newbies.erase(*a); } alive.clear(); std::copy(current, current+nCurrent, std::inserter(alive, alive.end())); + return memberChange; } Url ClusterMap::getUrl(const Map& map, const MemberId& id) { @@ -133,8 +135,8 @@ bool ClusterMap::dumpRequest(const MemberId& id, const std::string& url) { return false; } -void ClusterMap::ready(const MemberId& id, const Url& url) { - if (isAlive(id)) members[id] = url; +bool ClusterMap::ready(const MemberId& id, const Url& url) { + return isAlive(id) && members.insert(Map::value_type(id,url)).second; } boost::optional ClusterMap::dumpOffer(const MemberId& from, const MemberId& to) { -- cgit v1.2.1