(mon->is_peon() ?
(const char*)"(peon)" :
(const char*)"(?\?)")))
+ << " e" << mon->monmap->get_epoch()
<< " ";
}
bufferlist monmapbl;
monmap->encode(monmapbl);
- store->put_bl_sn(monmapbl, "monmap", monmap->epoch);
-
- // latest, too.. but make this conform to paxos stash latest format
- bufferlist latest;
- version_t v = monmap->get_epoch();
- ::encode(v, latest);
- ::encode(monmapbl, latest);
- store->put_bl_ss(latest, "monmap", "latest");
for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); p++) {
PaxosService *svc = *p;
svc->create_pending();
if (svc->paxos->machine_id == PAXOS_OSDMAP)
svc->create_initial(osdmapbl);
+ else if (svc->paxos->machine_id == PAXOS_MONMAP)
+ svc->create_initial(monmapbl);
else
svc->create_initial(bl);
// commit to paxos
store->put_int(1, svc->get_machine_name(), "last_committed");
}
+ // stash latest monmap
+ bufferlist latest;
+ version_t v = monmap->get_epoch();
+ ::encode(v, latest);
+ ::encode(monmapbl, latest);
+ store->put_bl_ss(latest, "monmap", "latest");
+
return 0;
}
return *_dout << dbeginl
<< "mon" << mon->whoami
<< (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)")))
- << ".client v" << mon->monmap->epoch << " ";
+ << ".monmap v" << mon->monmap->epoch << " ";
}
void MonmapMonitor::create_initial(bufferlist& bl)
{
- /* Since the MonMap belongs to the Monitor and is initialized
- by it, we don't need to do anything here. */
+ pending_map.decode(bl);
+ dout(10) << "create_initial was fed epoch " << pending_map.epoch << dendl;
}
bool MonmapMonitor::update_from_paxos()
{
dout(10) << "encode_pending epoch " << pending_map.epoch << dendl;
- assert(mon->monmap->epoch + 1 == pending_map.epoch);
+ assert(mon->monmap->epoch + 1 == pending_map.epoch ||
+ pending_map.epoch == 1); // special case mkfs!
pending_map.encode(bl);
}