9 class config_view_change {
11 virtual void commit_change(unsigned view_id) = 0;
12 virtual ~config_view_change() {};
15 class config : public paxos_change {
17 acceptor *paxos_acceptor;
18 proposer *paxos_proposer;
22 config_view_change *vc;
23 std::vector<std::string> mems;
25 std::condition_variable config_cond;
26 paxos_protocol::status heartbeat(
30 std::string value(const std::vector<std::string> &mems) const;
31 void members(const std::string &v, std::vector<std::string> &m) const;
32 void get_view_wo(unsigned instance, std::vector<std::string> &m);
33 bool remove(const std::string &);
36 OK, // response and same view #
37 VIEWERR, // response but different view #
38 FAILURE, // no response
40 heartbeat_t doheartbeat(const std::string &m);
42 config(const std::string &_first,
43 const std::string &_me,
44 config_view_change *_vc);
45 unsigned view_id() { return my_view_id; }
46 const std::string &myaddr() const { return me; };
47 std::string dump() { return paxos_acceptor->dump(); };
48 void get_view(unsigned instance, std::vector<std::string> &m);
49 void restore(const std::string &s);
50 bool add(const std::string &, unsigned view_id);
51 bool ismember(const std::string &m, unsigned view_id);
52 void heartbeater(void);
53 void paxos_commit(unsigned instance, const std::string &v);
54 rpcs *get_rpcs() { return paxos_acceptor->get_rpcs(); }
55 void breakpoint(int b) { paxos_proposer->breakpoint(b); }