7 #include "paxos_protocol.h"
14 virtual void paxos_commit(unsigned instance, 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_wo(unsigned instance, std::string v);
34 paxos_protocol::status preparereq(std::string src,
35 paxos_protocol::preparearg a,
36 paxos_protocol::prepareres &r);
37 paxos_protocol::status acceptreq(std::string src,
38 paxos_protocol::acceptarg a, bool &r);
39 paxos_protocol::status decidereq(std::string src,
40 paxos_protocol::decidearg a, int &r);
45 acceptor(class paxos_change *cfg, bool _first, std::string _me,
48 void commit(unsigned instance, std::string v);
49 unsigned instance() { return instance_h; }
50 std::string value(unsigned instance) { return values[instance]; }
52 void restore(std::string);
53 rpcs *get_rpcs() { return pxs; };
54 prop_t get_n_h() { return n_h; };
55 unsigned get_instance_h() { return instance_h; };
58 extern bool isamember(std::string m, const std::vector<std::string> &nodes);
59 extern std::string print_members(const std::vector<std::string> &nodes);
74 prop_t my_n; // number of the last proposal used in this instance
77 bool prepare(unsigned instance, std::vector<std::string> &accepts,
78 std::vector<std::string> nodes,
80 void accept(unsigned instance, std::vector<std::string> &accepts,
81 std::vector<std::string> nodes, std::string v);
82 void decide(unsigned instance, std::vector<std::string> accepts,
87 bool majority(const std::vector<std::string> &l1, const std::vector<std::string> &l2);
91 proposer(class paxos_change *cfg, class acceptor *_acceptor, std::string _me);
93 bool run(int instance, std::vector<std::string> cnodes, std::string v);
95 void breakpoint(int b);