]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: search for latest full osdmap if record version is missing
authorSage Weil <sage@inktank.com>
Wed, 24 Jul 2013 18:55:42 +0000 (11:55 -0700)
committerSage Weil <sage@inktank.com>
Wed, 24 Jul 2013 19:12:38 +0000 (12:12 -0700)
In 97462a3213e5e15812c79afc0f54d697b6c498b1 we tried to search for a
recent full osdmap but were looking at the wrong key.  If full_0 was
present we could record that the latest full map was last_committed even
though it wasn't present.  This is fixed in 76cd7ac1c, but we need to
compensate for when get_version_latest_full() gives us a back version
number by repeating the search.

Fixes: #5737
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
(cherry picked from commit c2131d4047156aa2964581c9dbd93846382a07e7)

src/mon/OSDMonitor.cc

index 05cafcd8ff44f635bc7708ec77b39cd7c7351909..ad4e5f1d4a197719ff00d583a556f5d2675755d2 100644 (file)
@@ -127,6 +127,16 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
   if (latest_full == 0 && get_first_committed() > 1)
     latest_full = get_first_committed();
 
+  if (latest_full > 0) {
+    // make sure we can really believe get_version_latest_full(); see
+    // 76cd7ac1c2094b34ad36bea89b2246fa90eb2f6d
+    bufferlist test;
+    get_version_full(latest_full, test);
+    if (test.length() == 0) {
+      dout(10) << __func__ << " ignoring recorded latest_full as it is missing; fallback to search" << dendl;
+      latest_full = 0;
+    }
+  }
   if (get_first_committed() > 1 &&
       latest_full < get_first_committed()) {
     /* a bug introduced in 7fb3804fb860dcd0340dd3f7c39eec4315f8e4b6 would lead