#include "log.h"
using prepareres = paxos_protocol::prepareres;
-
-using node_t = string;
-using nodes_t = vector<node_t>;
-using value_t = string;
+using node_t = paxos_protocol::node_t;
+using nodes_t = paxos_protocol::nodes_t;
+using value_t = paxos_protocol::value_t;
class paxos_change {
public:
virtual void paxos_commit(unsigned instance, const value_t & v) = 0;
- virtual ~paxos_change() {}
+ virtual ~paxos_change();
};
extern bool isamember(const node_t & m, const nodes_t & nodes);
class proposer_acceptor {
private:
- mutex proposer_mutex;
- mutex acceptor_mutex;
+ std::mutex proposer_mutex, acceptor_mutex;
paxos_change *delegate;
node_t me;
- rpcs pxs = {(uint32_t)stoi(me)};
+ rpcs pxs{(in_port_t)std::stoi(me)};
bool break1 = false;
bool break2 = false;
prop_t accepted = {0, me}; // number of highest proposal accepted
value_t accepted_value; // value of highest proposal accepted
unsigned instance_h = 0; // number of the highest instance we have decided
- map<unsigned,value_t> values; // vals of each instance
+ std::map<unsigned,value_t> values; // vals of each instance
friend class log;
- log l = {this, me};
+ class log l = {this, me};
void commit(unsigned instance, const value_t & v);
void commit(unsigned instance, const value_t & v, lock & pxs_mutex_lock);
unsigned instance() { return instance_h; }
const value_t & value(unsigned instance) { return values[instance]; }
string dump() { return l.dump(); }
- void restore(const string &s) { l.restore(s); l.logread(); }
+ void restore(const string & s) { l.restore(s); l.logread(); }
rpcs *get_rpcs() { return &pxs; }
bool run(unsigned instance, const nodes_t & cnodes, const value_t & v);