diff options
author | Alan Conway <aconway@apache.org> | 2010-01-06 17:01:50 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2010-01-06 17:01:50 +0000 |
commit | e7c824871a7238697e5c534aafffee99078975cd (patch) | |
tree | 8fe2f397beb8f3b2e2fe94386dfee7aa168b2376 /cpp/src/qpid/cluster/ClusterMap.cpp | |
parent | de23cb5942844463a237cff18c30e5f43ea5d5d0 (diff) | |
download | qpid-python-e7c824871a7238697e5c534aafffee99078975cd.tar.gz |
Added config-seq counter to track config changes since cluster init.
Config-seq is recorded persitently to help identify best store when
recovering from total failure.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@896538 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/cluster/ClusterMap.cpp')
-rw-r--r-- | cpp/src/qpid/cluster/ClusterMap.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/cpp/src/qpid/cluster/ClusterMap.cpp b/cpp/src/qpid/cluster/ClusterMap.cpp index 85ed447113..c050293717 100644 --- a/cpp/src/qpid/cluster/ClusterMap.cpp +++ b/cpp/src/qpid/cluster/ClusterMap.cpp @@ -57,15 +57,17 @@ void assignFieldTable(FieldTable& ft, const ClusterMap::Map& map) { } -ClusterMap::ClusterMap() : frameSeq(0) {} +ClusterMap::ClusterMap() : frameSeq(0), configSeq(0) {} -ClusterMap::ClusterMap(const Map& map) : frameSeq(0) { +ClusterMap::ClusterMap(const Map& map) : frameSeq(0), configSeq(0) { transform(map.begin(), map.end(), inserter(alive, alive.begin()), bind(&Map::value_type::first, _1)); members = map; } -ClusterMap::ClusterMap(const FieldTable& joinersFt, const FieldTable& membersFt, framing::SequenceNumber frameSeq_) - : frameSeq(frameSeq_) +ClusterMap::ClusterMap(const FieldTable& joinersFt, const FieldTable& membersFt, + framing::SequenceNumber frameSeq_, + framing::SequenceNumber configSeq_) + : frameSeq(frameSeq_), configSeq(configSeq_) { for_each(joinersFt.begin(), joinersFt.end(), bind(&addFieldTableValue, _1, ref(joiners), ref(alive))); for_each(membersFt.begin(), membersFt.end(), bind(&addFieldTableValue, _1, ref(members), ref(alive))); @@ -81,6 +83,7 @@ void ClusterMap::toMethodBody(framing::ClusterConnectionMembershipBody& b) const b.getMembers().clear(); for_each(members.begin(), members.end(), bind(&insertFieldTableFromMapValue, ref(b.getMembers()), _1)); b.setFrameSeq(frameSeq); + b.setConfigSeq(configSeq); } Url ClusterMap::getUrl(const Map& map, const MemberId& id) { @@ -133,6 +136,7 @@ ostream& operator<<(ostream& o, const ClusterMap& m) { else o << "(unknown)"; o << " "; } + o << "frameSeq=" << m.getFrameSeq() << " configSeq=" << m.getConfigSeq(); return o; } @@ -153,6 +157,7 @@ bool ClusterMap::ready(const MemberId& id, const Url& url) { } bool ClusterMap::configChange(const Set& update) { + ++configSeq; bool memberChange = false; Set removed; set_difference(alive.begin(), alive.end(), |