Major clean-ups. Migrating to C++11.
[invirt/third/libt4.git] / config.h
1 #ifndef config_h
2 #define config_h
3
4 #include <string>
5 #include <vector>
6 #include "paxos.h"
7 #include "lock.h"
8
9 class config_view_change {
10     public:
11         virtual void commit_change(unsigned view_id) = 0;
12         virtual ~config_view_change() {};
13 };
14
15 class config : public paxos_change {
16     private:
17         acceptor *paxos_acceptor;
18         proposer *paxos_proposer;
19         unsigned my_view_id;
20         std::string first;
21         std::string me;
22         config_view_change *vc;
23         std::vector<std::string> mems;
24         mutex cfg_mutex;
25         std::condition_variable config_cond;
26         paxos_protocol::status heartbeat(
27                 std::string m,
28                 unsigned instance,
29                 int &r);
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 &);
34         void reconstruct();
35         typedef enum {
36             OK, // response and same view #
37             VIEWERR,    // response but different view #
38             FAILURE,    // no response
39         } heartbeat_t;
40         heartbeat_t doheartbeat(const std::string &m);
41     public:
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); }
56 };
57
58 #endif