From: Sage Weil Date: Wed, 24 Jul 2013 18:55:42 +0000 (-0700) Subject: mon/OSDMonitor: search for latest full osdmap if record version is missing X-Git-Tag: v0.61.7~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=27f31895664fa7f10c1617d486f2a6ece0f97091;p=ceph.git mon/OSDMonitor: search for latest full osdmap if record version is missing 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 Reviewed-by: Joao Eduardo Luis (cherry picked from commit c2131d4047156aa2964581c9dbd93846382a07e7) --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 05cafcd8ff4..ad4e5f1d4a1 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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