X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5fd8cc8409d0efadc07dfe8d6774ad9ff477663d..5987a5357ccfd818d540a7aa58eb498a1be07aa1:/config.h?ds=sidebyside diff --git a/config.h b/config.h index 9d7b023..f3fe216 100644 --- a/config.h +++ b/config.h @@ -4,51 +4,52 @@ #include #include #include "paxos.h" +#include "lock.h" class config_view_change { - public: - virtual void commit_change(unsigned vid) = 0; - virtual ~config_view_change() {}; + public: + virtual void commit_change(unsigned view_id) = 0; + virtual ~config_view_change() {}; }; class config : public paxos_change { - private: - acceptor *acc; - proposer *pro; - rpcs *pxsrpc; - unsigned myvid; - std::string first; - std::string me; - config_view_change *vc; - std::vector mems; - pthread_mutex_t cfg_mutex; - pthread_cond_t heartbeat_cond; - pthread_cond_t config_cond; - paxos_protocol::status heartbeat(std::string m, unsigned instance, int &r); - std::string value(std::vector mems); - std::vector members(std::string v); - std::vector get_view_wo(unsigned instance); - bool remove_wo(std::string); - void reconstruct(); - typedef enum { - OK, // response and same view # - VIEWERR, // response but different view # - FAILURE, // no response - } heartbeat_t; - heartbeat_t doheartbeat(std::string m); - public: - config(std::string _first, std::string _me, config_view_change *_vc); - unsigned vid() { return myvid; } - std::string myaddr() { return me; }; - std::string dump() { return acc->dump(); }; - std::vector get_view(unsigned instance); - void restore(std::string s); - bool add(std::string, unsigned vid); - bool ismember(std::string m, unsigned vid); - void heartbeater(void); - void paxos_commit(unsigned instance, std::string v); - rpcs *get_rpcs() { return acc->get_rpcs(); } - void breakpoint(int b) { pro->breakpoint(b); } + private: + acceptor *paxos_acceptor; + proposer *paxos_proposer; + unsigned my_view_id; + std::string first; + std::string me; + config_view_change *vc; + std::vector mems; + mutex cfg_mutex; + std::condition_variable config_cond; + paxos_protocol::status heartbeat(int &r, std::string m, unsigned instance); + std::string value(const std::vector &mems) const; + void members(const std::string &v, std::vector &m) const; + void get_view_wo(unsigned instance, std::vector &m); + bool remove(const std::string &); + void reconstruct(); + typedef enum { + OK, // response and same view # + VIEWERR, // response but different view # + FAILURE, // no response + } heartbeat_t; + heartbeat_t doheartbeat(const std::string &m); + public: + config(const std::string &_first, + const std::string &_me, + config_view_change *_vc); + unsigned view_id() { return my_view_id; } + const std::string &myaddr() const { return me; }; + std::string dump() { return paxos_acceptor->dump(); }; + void get_view(unsigned instance, std::vector &m); + void restore(const std::string &s); + bool add(const std::string &, unsigned view_id); + bool ismember(const std::string &m, unsigned view_id); + void heartbeater(void); + void paxos_commit(unsigned instance, const std::string &v); + rpcs *get_rpcs() { return paxos_acceptor->get_rpcs(); } + void breakpoint(int b) { paxos_proposer->breakpoint(b); } }; #endif