]> 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 18:55:42 +0000 (11:55 -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>
src/mon/OSDMonitor.cc

index f2e51e406851274eb1eb84cdd3e9b5b65555b2ba..c6db052a591feabd5b27b6d8093783b9a606de4e 100644 (file)
@@ -126,6 +126,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