From c34983c39eb565ce8c40010c535696ff5fe20f92 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Tue, 27 Mar 2018 10:39:47 +0300 Subject: [PATCH] osd: don't crash on empty snapset Signed-off-by: Igor Fedotov Signed-off-by: Mykola Golub (cherry picked from commit 3996c0ae9c344de12eac2226e260c586ef48b09f) Conflicts: src/osd/PrimaryLogPG.cc - retain legacy snapshot handling in luminous - i.e., do not backport 89c3439191325c2ee39ab4490985e77e5865e28a --- src/osd/PrimaryLogPG.cc | 5 +++++ src/osd/SnapMapper.cc | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 1358eefa69a9..67cafe34e52d 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -10187,6 +10187,11 @@ int PrimaryLogPG::find_object_context(const hobject_t& oid, } else { auto p = obc->ssc->snapset.clone_snaps.find(soid.snap); assert(p != obc->ssc->snapset.clone_snaps.end()); + if (p->second.empty()) { + dout(1) << __func__ << " " << soid << " empty snapset -- DNE" << dendl; + assert(!cct->_conf->osd_debug_verify_snaps); + return -ENOENT; + } first = p->second.back(); last = p->second.front(); } diff --git a/src/osd/SnapMapper.cc b/src/osd/SnapMapper.cc index 374e2429b439..823b14282151 100644 --- a/src/osd/SnapMapper.cc +++ b/src/osd/SnapMapper.cc @@ -151,7 +151,10 @@ int SnapMapper::get_snaps( bufferlist::iterator bp = got.begin()->second.begin(); ::decode(*out, bp); dout(20) << __func__ << " " << oid << " " << out->snaps << dendl; - assert(!out->snaps.empty()); + if (out->snaps.empty()) { + dout(1) << __func__ << " " << oid << " empty snapset" << dendl; + assert(!cct->_conf->osd_debug_verify_snaps); + } } else { dout(20) << __func__ << " " << oid << " (out == NULL)" << dendl; } -- 2.47.3