]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: do not delete mon->monmap which is not created by new
authorHenry C Chang <henry_c_chang@tcloudcomputing.com>
Thu, 14 Oct 2010 11:52:41 +0000 (19:52 +0800)
committerSage Weil <sage@newdream.net>
Fri, 15 Oct 2010 03:06:48 +0000 (20:06 -0700)
Signed-off-by: Sage Weil <sage@newdream.net>
src/mon/Elector.cc

index 4a08d8667d4130df08e30449115f71939374950f..c51cbbac035591afa4d43cf61ae23e0784ea246b 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "common/Timer.h"
 #include "MonitorStore.h"
+#include "MonmapMonitor.h"
 #include "messages/MMonElection.h"
 
 #include "config.h"
@@ -292,18 +293,15 @@ void Elector::dispatch(Message *m)
                << " > my epoch " << mon->monmap->epoch 
                << ", taking it"
                << dendl;
-       delete mon->monmap;
-       mon->monmap = peermap;
-       mon->store->put_bl_sn(em->monmap_bl, "monmap", peermap->epoch);
-       mon->store->put_bl_ss(em->monmap_bl, "monmap", "latest");
-      } else {
-       if (peermap->epoch < mon->monmap->epoch) {
-         dout(0) << m->get_source_inst() << " has older monmap epoch " << peermap->epoch
-                 << " < my epoch " << mon->monmap->epoch 
-                 << dendl;
-       }
-       delete peermap;
+       mon->monmap->decode(em->monmap_bl);
+       mon->store->put_bl_sn(em->monmap_bl, "monmap", mon->monmap->epoch);
+       mon->monmon()->paxos->stash_latest(mon->monmap->epoch, em->monmap_bl);
+      } else if (peermap->epoch < mon->monmap->epoch) {
+       dout(0) << m->get_source_inst() << " has older monmap epoch " << peermap->epoch
+               << " < my epoch " << mon->monmap->epoch 
+               << dendl;
       } 
+      delete peermap;
 
       switch (em->op) {
       case MMonElection::OP_PROPOSE: