-void
-proposer::decide(unsigned instance, const std::vector<std::string> & accepts,
- const std::string & v)
-{
- struct paxos_protocol::decidearg arg = { instance, v };
- rpcc *r;
- for (auto i : accepts) {
- handle h(i);
- if (!(r = h.safebind()))
- continue;
- int res = 0;
- r->call_timeout(paxos_protocol::decidereq, rpcc::to(1000), res, me, arg);
- }
-}
-
-acceptor::acceptor(class paxos_change *_cfg, bool _first, const std::string & _me,
- const std::string & _value)
- : cfg(_cfg), me (_me), instance_h(0)
-{
- n_h.n = 0;
- n_h.m = me;
- n_a.n = 0;
- n_a.m = me;
- v_a.clear();
-
- l = new log (this, me);
-
- if (instance_h == 0 && _first) {
- values[1] = _value;
- l->loginstance(1, _value);
- instance_h = 1;
- }
-
- pxs = new rpcs((uint32_t)std::stoi(_me));
- pxs->reg(paxos_protocol::preparereq, &acceptor::preparereq, this);
- pxs->reg(paxos_protocol::acceptreq, &acceptor::acceptreq, this);
- pxs->reg(paxos_protocol::decidereq, &acceptor::decidereq, this);
+void proposer_acceptor::decide(unsigned instance, const nodes_t & accepts, const value_t & v) {
+ int res = 0;
+ for (auto i : accepts)
+ if (auto cl = rpcc::bind_cached(i))
+ cl->call_timeout(paxos_protocol::decidereq, 100ms, res, me, instance, v);