]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: store latest monmap is paxos-compatible format
authorSage Weil <sage@newdream.net>
Sun, 11 Oct 2009 04:26:53 +0000 (21:26 -0700)
committerSage Weil <sage@newdream.net>
Sun, 11 Oct 2009 04:26:53 +0000 (21:26 -0700)
Previously it was monmap/latest, but wasn't prefixed/wrapped with the
version_t.

src/TODO
src/cmon.cc
src/mon/Monitor.cc

index ab2356803295f79d13d72db5e92a0d9e50fe7b64..0e790a1f21b32ad0da43ac4771668e90f9842fde 100644 (file)
--- 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
index bcef3e206565fdf7cbb8955a7fb401627efcd6ae..e077f253145bfb2a69576f716818adf8c4ed4d72 100644 (file)
@@ -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;
index 24ebe0887990a96ea55a9216a9873b5b8dbb0dcb..ee680b0b3f614dc88d8f090d94c99bd2031bd717 100644 (file)
@@ -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<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); p++) {
     PaxosService *svc = *p;