7 #include "paxos_protocol.h"
14 virtual void paxos_commit(unsigned instance, const std::string & v) = 0;
15 virtual ~paxos_change() {}
27 prop_t n_h; // number of the highest proposal seen in a prepare
28 prop_t n_a; // number of highest proposal accepted
29 std::string v_a; // value of highest proposal accepted
30 unsigned instance_h; // number of the highest instance we have decided
31 std::map<unsigned,std::string> values; // vals of each instance
33 void commit(unsigned instance, const std::string & v, lock & pxs_mutex_lock);
34 paxos_protocol::status preparereq(paxos_protocol::prepareres & r,
35 const std::string & src, paxos_protocol::preparearg a);
36 paxos_protocol::status acceptreq(bool & r, const std::string & src,
37 paxos_protocol::acceptarg a);
38 paxos_protocol::status decidereq(int & r, const std::string & src,
39 paxos_protocol::decidearg a);
44 acceptor(class paxos_change *cfg, bool _first, const std::string & _me,
45 const std::string & _value);
47 void commit(unsigned instance, const std::string & v);
48 unsigned instance() { return instance_h; }
49 const std::string & value(unsigned instance) { return values[instance]; }
51 void restore(const std::string &);
52 rpcs *get_rpcs() { return pxs; }
53 prop_t get_n_h() { return n_h; }
54 unsigned get_instance_h() { return instance_h; }
57 extern bool isamember(const std::string & m, const std::vector<std::string> & nodes);
58 extern std::string print_members(const std::vector<std::string> & nodes);
73 prop_t my_n; // number of the last proposal used in this instance
76 bool prepare(unsigned instance, std::vector<std::string> & accepts,
77 const std::vector<std::string> & nodes,
79 void accept(unsigned instance, std::vector<std::string> & accepts,
80 const std::vector<std::string> & nodes, const std::string & v);
81 void decide(unsigned instance, const std::vector<std::string> & accepts,
82 const std::string & v);
86 bool majority(const std::vector<std::string> & l1, const std::vector<std::string> & l2);
90 proposer(class paxos_change *cfg, class acceptor *_acceptor, const std::string &_me);
92 bool run(unsigned instance, const std::vector<std::string> & cnodes, const std::string & v);
94 void breakpoint(int b);