summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/cluster/ClusterMap.h
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-09-16 00:22:00 +0000
committerAlan Conway <aconway@apache.org>2008-09-16 00:22:00 +0000
commit4325bf519604230227647c229931049fc2d89ab9 (patch)
tree6793eeef895c93caf7ce88e9a99747b13db334e9 /cpp/src/qpid/cluster/ClusterMap.h
parenteb41bbd1ff549a62b69d4ede4e2323e1427f5ece (diff)
downloadqpid-python-4325bf519604230227647c229931049fc2d89ab9.tar.gz
Simplified cluster updates.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@695696 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/cluster/ClusterMap.h')
-rw-r--r--cpp/src/qpid/cluster/ClusterMap.h62
1 files changed, 20 insertions, 42 deletions
diff --git a/cpp/src/qpid/cluster/ClusterMap.h b/cpp/src/qpid/cluster/ClusterMap.h
index 04323c5905..fce65f083d 100644
--- a/cpp/src/qpid/cluster/ClusterMap.h
+++ b/cpp/src/qpid/cluster/ClusterMap.h
@@ -23,7 +23,7 @@
*/
#include "types.h"
-#include "qpid/framing/ClusterMapBody.h"
+#include "qpid/framing/ClusterUpdateBody.h"
#include "qpid/Url.h"
#include <boost/function.hpp>
#include <vector>
@@ -34,68 +34,46 @@
namespace qpid {
namespace cluster {
+// FIXME aconway 2008-09-15: rename cluster status?
+
/**
* Map of established cluster members and brain-dumps in progress.
* A dumper is an established member that is sending catch-up data.
* A dumpee is an aspiring member that is receiving catch-up data.
*/
-class ClusterMap
-{
+class ClusterMap : public std::map<MemberId, Url> {
public:
ClusterMap();
-
- MemberId dumpRequest(const MemberId& from, const Url& url);
-
- void dumpError(const MemberId&);
-
- void ready(const MemberId& from, const Url& url);
- /** Update map for cpg leave event */
- void leave(const MemberId&);
+ /** First member of the cluster in ID order, gets to perform one-off tasks. */
+ MemberId first();
- /** Instead of updating the map, queue the updates for unstall */
- void stall();
+ /** Update for CPG config change. */
+ void configChange(const cpg_address* addrs, size_t size);
- /** Apply queued updates */
- void unstall();
-
- /** Number of unfinished dumps for member. */
- int dumps(const MemberId&) const;
/** Convert map contents to a cluster control body. */
- framing::ClusterMapBody toControl() const;
+ framing::ClusterUpdateBody toControl() const;
- /** Initialize map contents from a cluster control body. */
- void init(const framing::FieldTable& members,
- const framing::FieldTable& dumpees,
- const framing::FieldTable& dumps);
-
- void fromControl(const framing::ClusterMapBody&);
+ /** Update with first member. */
+ using std::map<MemberId, Url>::insert;
+ void insert(const MemberId& id, const Url& url) { insert(value_type(id,url)); }
+ void setDumping(bool d) { dumping = d; }
- size_t memberCount() const { return members.size(); }
- size_t dumpeeCount() const { return dumpees.size(); }
+ /** Apply update delivered from clsuter. */
+ void update(const framing::FieldTable& members, bool dumping);
+ void fromControl(const framing::ClusterUpdateBody&);
- bool isMember(const MemberId& id) const { return members.find(id) != members.end(); }
- bool isDumpee(const MemberId& id) const { return dumpees.find(id) != dumpees.end(); }
+ bool isMember(const MemberId& id) const { return find(id) != end(); }
+ bool isDumping() const { return dumping; }
std::vector<Url> memberUrls() const;
private:
- struct Dumpee { Url url; MemberId dumper; };
- typedef std::map<MemberId, Url> MemberMap;
- typedef std::map<MemberId, Dumpee> DumpeeMap;
- struct MatchDumper;
-
- MemberId nextDumper() const;
-
- MemberMap members;
- DumpeeMap dumpees;
- bool stalled;
- std::deque<boost::function<void()> > stallq;
+ bool dumping;
friend std::ostream& operator<<(std::ostream&, const ClusterMap&);
- friend std::ostream& operator<<(std::ostream& o, const ClusterMap::DumpeeMap::value_type& dv);
- friend std::ostream& operator<<(std::ostream& o, const ClusterMap::MemberMap::value_type& mv);
+ friend std::ostream& operator<<(std::ostream& o, const ClusterMap::value_type& mv);
};
}} // namespace qpid::cluster