X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5a5c578e2e358a121cdb9234a6cb11c4ecfbf323..c9be386a30dc7145ac757fae66c255b21da26d5d:/config.cc?ds=sidebyside diff --git a/config.cc b/config.cc index d1cd70a..038a100 100644 --- a/config.cc +++ b/config.cc @@ -61,15 +61,11 @@ void config::get_view(unsigned instance, vector &m, lock &) { } vector config::members(const string &value) const { - istringstream ist(value); - using it = istream_iterator; - return {it(ist), it()}; + return explode(value); } -string config::value(const vector &m) const { - ostringstream ost; - copy(m.begin(), m.end(), ostream_iterator(ost, " ")); - return ost.str(); +string config::value(const vector &members) const { + return implode(members); } void config::reconstruct(lock &cfg_mutex_lock) { @@ -77,7 +73,7 @@ void config::reconstruct(lock &cfg_mutex_lock) { my_view_id = paxos.instance(); if (my_view_id > 0) { get_view(my_view_id, mems, cfg_mutex_lock); - LOG("config::reconstruct: " << my_view_id << " " << print_members(mems)); + LOG("config::reconstruct: " << my_view_id << " " << mems); } } @@ -86,7 +82,7 @@ void config::paxos_commit(unsigned instance, const string &value) { lock cfg_mutex_lock(cfg_mutex); vector newmem = members(value); - LOG("config::paxos_commit: " << instance << ": " << print_members(newmem)); + LOG("config::paxos_commit: " << instance << ": " << newmem); for (auto mem : mems) { LOG("config::paxos_commit: is " << mem << " still a member?"); @@ -114,17 +110,20 @@ bool config::ismember(const string &m, unsigned vid) { bool config::add(const string &new_m, unsigned vid) { lock cfg_mutex_lock(cfg_mutex); - if (vid != my_view_id) + LOG("adding " << new_m << " to " << vid); + if (vid != my_view_id) { + LOG("that's not my view id, " << my_view_id << "!"); return false; - LOG("config::add " << new_m); + } vector m = mems; m.push_back(new_m); vector cmems = mems; unsigned nextvid = my_view_id + 1; + LOG("calling down to paxos layer"); cfg_mutex_lock.unlock(); bool r = paxos.run(nextvid, cmems, value(m)); cfg_mutex_lock.lock(); - LOG("config::add: proposer returned " << (r ? "success" : "failure")); + LOG("paxos proposer returned " << (r ? "success" : "failure")); return r; } @@ -156,7 +155,7 @@ void config::heartbeater() [[noreturn]] { unsigned vid = my_view_id; vector cmems; get_view(vid, cmems, cfg_mutex_lock); - LOG("heartbeater: current membership " << print_members(cmems)); + LOG("heartbeater: current membership " << cmems); if (!isamember(me, cmems)) { LOG("heartbeater: not member yet; skip hearbeat");