8 #include "paxos_protocol.h"
18 virtual void paxos_commit(unsigned instance, const string & v) = 0;
19 virtual ~paxos_change() {}
31 prop_t n_h; // number of the highest proposal seen in a prepare
32 prop_t n_a; // number of highest proposal accepted
33 string v_a; // value of highest proposal accepted
34 unsigned instance_h; // number of the highest instance we have decided
35 map<unsigned,string> values; // vals of each instance
37 void commit(unsigned instance, const string & v, lock & pxs_mutex_lock);
38 paxos_protocol::status preparereq(paxos_protocol::prepareres & r,
39 const string & src, paxos_protocol::preparearg a);
40 paxos_protocol::status acceptreq(bool & r, const string & src,
41 paxos_protocol::acceptarg a);
42 paxos_protocol::status decidereq(int & r, const string & src,
43 paxos_protocol::decidearg a);
48 acceptor(class paxos_change *cfg, bool _first, const string & _me,
49 const string & _value);
51 void commit(unsigned instance, const string & v);
52 unsigned instance() { return instance_h; }
53 const string & value(unsigned instance) { return values[instance]; }
55 void restore(const string &);
56 rpcs *get_rpcs() { return pxs; }
57 prop_t get_n_h() { return n_h; }
58 unsigned get_instance_h() { return instance_h; }
61 extern bool isamember(const string & m, const vector<string> & nodes);
62 extern string print_members(const vector<string> & nodes);
77 prop_t my_n; // number of the last proposal used in this instance
80 bool prepare(unsigned instance, vector<string> & accepts,
81 const vector<string> & nodes,
83 void accept(unsigned instance, vector<string> & accepts,
84 const vector<string> & nodes, const string & v);
85 void decide(unsigned instance, const vector<string> & accepts,
90 bool majority(const vector<string> & l1, const vector<string> & l2);
94 proposer(class paxos_change *cfg, class acceptor *_acceptor, const string &_me);
96 bool run(unsigned instance, const vector<string> & cnodes, const string & v);
98 void breakpoint(int b);