1ce3be791e436054eaea35e1748eefc1082b67fc
[invirt/third/libt4.git] / paxos_protocol.h
1 #ifndef paxos_protocol_h
2 #define paxos_protocol_h
3
4 #include "types.h"
5 #include "rpc/rpc.h"
6
7 struct prop_t {
8     unsigned n;
9     string m;
10
11     MEMBERS(n, m)
12     LEXICOGRAPHIC_COMPARISON(prop_t)
13 };
14
15 namespace paxos_protocol {
16     enum status : rpc_protocol::status { OK, ERR };
17     struct prepareres {
18         bool oldinstance;
19         bool accept;
20         prop_t n_a;
21         string v_a;
22
23         MEMBERS(oldinstance, accept, n_a, v_a)
24     };
25     using node_t = string;
26     using nodes_t = vector<node_t>;
27     using value_t = string;
28
29     REMOTE_PROCEDURE_BASE(0x11000);
30     REMOTE_PROCEDURE(1, preparereq, (prepareres &, node_t, unsigned, prop_t));
31     REMOTE_PROCEDURE(2, acceptreq, (bool &, node_t, unsigned, prop_t, value_t));
32     REMOTE_PROCEDURE(3, decidereq, (int &, node_t, unsigned, value_t));
33     REMOTE_PROCEDURE(4, heartbeat, (int &, string, unsigned));
34 }
35
36 #endif