]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: make initial monmap epoch match paxos version
authorSage Weil <sage@newdream.net>
Fri, 6 Nov 2009 06:25:30 +0000 (22:25 -0800)
committerSage Weil <sage@newdream.net>
Fri, 6 Nov 2009 06:25:30 +0000 (22:25 -0800)
src/mon/Monitor.cc
src/mon/MonmapMonitor.cc

index c9e9b819cecacfedddeee9ad2b0e6f476303ed5c..fda41857bdbefdfc61d9447257e9c6c4bc2d781d 100644 (file)
@@ -68,6 +68,7 @@ static ostream& _prefix(Monitor *mon) {
                     (mon->is_peon() ? 
                      (const char*)"(peon)" : 
                      (const char*)"(?\?)")))
+               << " e" << mon->monmap->get_epoch()
                << " ";
 }
 
@@ -798,14 +799,6 @@ int Monitor::mkfs(bufferlist& osdmapbl)
 
   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;
@@ -815,6 +808,8 @@ int Monitor::mkfs(bufferlist& osdmapbl)
     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
@@ -823,6 +818,13 @@ int Monitor::mkfs(bufferlist& osdmapbl)
     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;
 }
 
index 7f4fb20d74ebe7204e6c7b098cf1cb058787ef21..422ef67b3d3ef0359ce11fd2b5ebdd1410088f1c 100644 (file)
@@ -29,13 +29,13 @@ static ostream& _prefix(Monitor *mon) {
   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()
@@ -73,7 +73,8 @@ void MonmapMonitor::encode_pending(bufferlist& bl)
 {
   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);
 }