X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5a5c578e2e358a121cdb9234a6cb11c4ecfbf323..06282fd37814c4a9d53bca089b048709b368f5b3:/paxos.h diff --git a/paxos.h b/paxos.h index 116403d..79924a3 100644 --- a/paxos.h +++ b/paxos.h @@ -7,47 +7,44 @@ #include "log.h" using prepareres = paxos_protocol::prepareres; - -using node_t = string; -using nodes_t = vector; -using value_t = string; +using node_t = paxos_protocol::node_t; +using nodes_t = paxos_protocol::nodes_t; +using value_t = paxos_protocol::value_t; class paxos_change { public: virtual void paxos_commit(unsigned instance, const value_t & v) = 0; - virtual ~paxos_change() {} + virtual ~paxos_change(); }; extern bool isamember(const node_t & m, const nodes_t & nodes); extern bool majority(const nodes_t & l1, const nodes_t & l2); -extern string print_members(const nodes_t & nodes); class proposer_acceptor { private: - mutex proposer_mutex; - mutex acceptor_mutex; + std::mutex proposer_mutex, acceptor_mutex; paxos_change *delegate; node_t me; - rpcs pxs = {(uint32_t)std::stoi(me)}; + rpcs pxs{(in_port_t)std::stoi(me)}; bool break1 = false; bool break2 = false; // Proposer state bool stable = true; - prop_t my_n = {0, me}; // number of the last proposal used in this instance + prop_t proposal = {0, me}; // number of the last proposal used in this instance // Acceptor state - prop_t n_h = {0, me}; // number of the highest proposal seen in a prepare - prop_t n_a = {0, me}; // number of highest proposal accepted - value_t v_a; // value of highest proposal accepted + prop_t promise = {0, me}; // number of the highest proposal seen in a prepare + prop_t accepted = {0, me}; // number of highest proposal accepted + value_t accepted_value; // value of highest proposal accepted unsigned instance_h = 0; // number of the highest instance we have decided - map values; // vals of each instance + std::map values; // vals of each instance friend class log; - log l = {this, me}; + class log l = {this, me}; void commit(unsigned instance, const value_t & v); void commit(unsigned instance, const value_t & v, lock & pxs_mutex_lock); @@ -68,7 +65,7 @@ class proposer_acceptor { unsigned instance() { return instance_h; } const value_t & value(unsigned instance) { return values[instance]; } string dump() { return l.dump(); } - void restore(const string &s) { l.restore(s); l.logread(); } + void restore(const string & s) { l.restore(s); l.logread(); } rpcs *get_rpcs() { return &pxs; } bool run(unsigned instance, const nodes_t & cnodes, const value_t & v);