diff options
Diffstat (limited to 'cpp/src/qpid/ha/Membership.h')
-rw-r--r-- | cpp/src/qpid/ha/Membership.h | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/cpp/src/qpid/ha/Membership.h b/cpp/src/qpid/ha/Membership.h index 8406dccd5d..956569fbd8 100644 --- a/cpp/src/qpid/ha/Membership.h +++ b/cpp/src/qpid/ha/Membership.h @@ -24,45 +24,72 @@ #include "BrokerInfo.h" #include "types.h" -#include "qpid/framing/Uuid.h" #include "qpid/log/Statement.h" +#include "qpid/sys/Mutex.h" #include "qpid/types/Variant.h" #include <boost/function.hpp> #include <set> #include <vector> #include <iosfwd> + +namespace qmf { namespace org { namespace apache { namespace qpid { namespace ha { +class HaBroker; +}}}}} + namespace qpid { + +namespace broker { +class Broker; +} + +namespace types { +class Uuid; +} + namespace ha { +class HaBroker; /** * Keep track of the brokers in the membership. - * THREAD UNSAFE: caller must serialize + * Send management when events on membership changes. + * THREAD SAFE */ class Membership { public: - Membership(const types::Uuid& self_) : self(self_) {} + Membership(const BrokerInfo& info, HaBroker&); - void reset(const BrokerInfo& b); ///< Reset to contain just one member. + void setMgmtObject(boost::shared_ptr<qmf::org::apache::qpid::ha::HaBroker>); + + void clear(); ///< Clear all but self. void add(const BrokerInfo& b); void remove(const types::Uuid& id); bool contains(const types::Uuid& id); + /** Return IDs of all READY backups other than self */ BrokerInfo::Set otherBackups() const; void assign(const types::Variant::List&); types::Variant::List asList() const; - bool get(const types::Uuid& id, BrokerInfo& result); + bool get(const types::Uuid& id, BrokerInfo& result) const; + + types::Uuid getSelf() const { return self; } + BrokerInfo getInfo() const; + BrokerStatus getStatus() const; + void setStatus(BrokerStatus s); private: - types::Uuid self; + void update(sys::Mutex::ScopedLock&); + BrokerStatus getStatus(sys::Mutex::ScopedLock&) const; + + mutable sys::Mutex lock; + HaBroker& haBroker; + boost::shared_ptr<qmf::org::apache::qpid::ha::HaBroker> mgmtObject; + const types::Uuid self; BrokerInfo::Map brokers; - friend std::ostream& operator<<(std::ostream&, const Membership&); }; -std::ostream& operator<<(std::ostream&, const Membership&); - }} // namespace qpid::ha #endif /*!QPID_HA_MEMBERSHIP_H*/ |