From 97b76ff0a0917f4736b34b8339be03d9b616ab9c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 10 Oct 2009 21:26:53 -0700 Subject: [PATCH] mon: store latest monmap is paxos-compatible format Previously it was monmap/latest, but wasn't prefixed/wrapped with the version_t. --- src/TODO | 2 ++ src/cmon.cc | 22 +++++++++++++++------- src/mon/Monitor.cc | 8 +++++++- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/TODO b/src/TODO index ab2356803295f..0e790a1f21b32 100644 --- a/src/TODO +++ b/src/TODO @@ -59,6 +59,8 @@ v0.17 monc<->mon lossy, client/server client<->mds lossless, client/server +- mon: revisit session trim logic... s->until == utime_t()? :/ + pending wire, disk format changes - add fsid to MMonSubscribeAck diff --git a/src/cmon.cc b/src/cmon.cc index bcef3e206565f..e077f253145bf 100644 --- a/src/cmon.cc +++ b/src/cmon.cc @@ -94,14 +94,22 @@ int main(int argc, const char **argv) } // monmap? - bufferlist mapbl; - store.get_bl_ss(mapbl, "monmap/latest", 0); - if (mapbl.length() == 0) { - cerr << "mon fs missing 'monmap'" << std::endl; - exit(1); - } MonMap monmap; - monmap.decode(mapbl); + { + bufferlist latest; + store.get_bl_ss(latest, "monmap/latest", 0); + if (latest.length() == 0) { + cerr << "mon fs missing 'monmap'" << std::endl; + exit(1); + } + bufferlist::iterator p = latest.begin(); + version_t v; + ::decode(v, p); + bufferlist mapbl; + ::decode(mapbl, p); + monmap.decode(mapbl); + assert(v == monmap.get_epoch()); + } if ((unsigned)whoami >= monmap.size() || whoami < 0) { cerr << "mon" << whoami << " does not exist in monmap" << std::endl; diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 24ebe0887990a..ee680b0b3f614 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -821,7 +821,13 @@ int Monitor::mkfs(bufferlist& osdmapbl) bufferlist monmapbl; monmap->encode(monmapbl); store->put_bl_sn(monmapbl, "monmap", monmap->epoch); - store->put_bl_ss(monmapbl, "monmap", "latest"); + + // 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::iterator p = paxos_service.begin(); p != paxos_service.end(); p++) { PaxosService *svc = *p; -- 2.39.5