-string config::value(const vector<string> &m) const {
- ostringstream ost;
- copy(m.begin(), m.end(), ostream_iterator<string>(ost, " "));
- return ost.str();
+string config::value(const vector<string> &members) const {
+ return implode(members);
my_view_id = paxos.instance();
if (my_view_id > 0) {
get_view(my_view_id, mems, cfg_mutex_lock);
my_view_id = paxos.instance();
if (my_view_id > 0) {
get_view(my_view_id, mems, cfg_mutex_lock);
bool config::add(const string &new_m, unsigned vid) {
lock cfg_mutex_lock(cfg_mutex);
bool config::add(const string &new_m, unsigned vid) {
lock cfg_mutex_lock(cfg_mutex);
- LOG("config::add " << new_m);
- vector<string> m = mems;
+ }
+ LOG("calling down to paxos layer");
+ vector<string> m(mems), cmems(mems);
unsigned nextvid = my_view_id + 1;
cfg_mutex_lock.unlock();
bool r = paxos.run(nextvid, cmems, value(m));
cfg_mutex_lock.lock();
unsigned nextvid = my_view_id + 1;
cfg_mutex_lock.unlock();
bool r = paxos.run(nextvid, cmems, value(m));
cfg_mutex_lock.lock();
return r;
}
// caller should hold cfg_mutex
bool config::remove(const string &m, lock &cfg_mutex_lock) {
return r;
}
// caller should hold cfg_mutex
bool config::remove(const string &m, lock &cfg_mutex_lock) {
config_cond.wait_until(cfg_mutex_lock, next_timeout);
unsigned vid = my_view_id;
vector<string> cmems;
get_view(vid, cmems, cfg_mutex_lock);
config_cond.wait_until(cfg_mutex_lock, next_timeout);
unsigned vid = my_view_id;
vector<string> cmems;
get_view(vid, cmems, cfg_mutex_lock);
config::heartbeat_t config::doheartbeat(const string &m, lock &cfg_mutex_lock) {
unsigned vid = my_view_id;
config::heartbeat_t config::doheartbeat(const string &m, lock &cfg_mutex_lock) {
unsigned vid = my_view_id;
handle h(m);
cfg_mutex_lock.unlock();
int r = 0, ret = rpc_const::bind_failure;
if (rpcc *cl = h.safebind())
handle h(m);
cfg_mutex_lock.unlock();
int r = 0, ret = rpc_const::bind_failure;
if (rpcc *cl = h.safebind())
- ret = cl->call_timeout(paxos_protocol::heartbeat, rpcc::to(1000), r, me, vid);
+ ret = cl->call_timeout(paxos_protocol::heartbeat, rpcc::to(100), r, me, vid);