summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/cluster/ClusterMap.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-10-07 17:27:06 +0000
committerAlan Conway <aconway@apache.org>2008-10-07 17:27:06 +0000
commit41d33af55b9fbf4c664ccb56accb1a37bd1ef006 (patch)
treede5e5b5e431bf695b2c44e198ee93d179201a0e2 /cpp/src/qpid/cluster/ClusterMap.cpp
parenta653ebe5bdfad1d44a576d2ab23f7e6ea80ba96f (diff)
downloadqpid-python-41d33af55b9fbf4c664ccb56accb1a37bd1ef006.tar.gz
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
Diffstat (limited to 'cpp/src/qpid/cluster/ClusterMap.cpp')
-rw-r--r--cpp/src/qpid/cluster/ClusterMap.cpp10
1 files changed, 6 insertions, 4 deletions
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<Url> ClusterMap::dumpOffer(const MemberId& from, const MemberId& to) {