1 #ifndef paxos_protocol_h
2 #define paxos_protocol_h
4 #include "include/types.h"
5 #include "include/rpc/rpc.h"
12 LEXICOGRAPHIC_COMPARISON(prop_t)
15 namespace paxos_protocol {
16 enum status : rpc_protocol::status { OK, ERR };
18 enum { reject, oldinstance, accept } type;
22 MEMBERS(type, n_a, v_a)
24 using node_t = string;
25 using nodes_t = std::vector<node_t>;
26 using view_t = unsigned;
27 using value_t = string;
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, (view_t &, string, view_t));