summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-07-24 11:55:42 -0700
committerSage Weil <sage@inktank.com>2013-07-24 11:55:42 -0700
commitc2131d4047156aa2964581c9dbd93846382a07e7 (patch)
treee2a18f45fc448a288243f535a959eb2937d97962
parenta7a7d3fc8a2ba4a30ef136a32f2903d157b3e19a (diff)
downloadceph-c2131d4047156aa2964581c9dbd93846382a07e7.tar.gz
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 <sage@inktank.com> Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
-rw-r--r--src/mon/OSDMonitor.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc
index f2e51e40685..c6db052a591 100644
--- a/src/mon/OSDMonitor.cc
+++ b/src/mon/OSDMonitor.cc
@@ -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