]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: don't crash on empty snapset
authorMykola Golub <mgolub@suse.com>
Tue, 27 Mar 2018 07:39:47 +0000 (10:39 +0300)
committerMykola Golub <mgolub@suse.com>
Mon, 16 Apr 2018 12:14:52 +0000 (15:14 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/osd/PrimaryLogPG.cc
src/osd/SnapMapper.cc

index 7c240df26703dd753e4c7d88ffe3fc714ad3864f..555a4ae3565a8564fb090a6f7e3e2894de8c28c5 100644 (file)
@@ -11035,6 +11035,11 @@ int PrimaryLogPG::find_object_context(const hobject_t& oid,
   snapid_t first, last;
   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();
   if (first <= oid.snap) {
index 64e4568445a7d9f6d4bc9ef6c3087da4b1cf0114..6998ede3e241dbbdb9785521c4d5e74736b7ef58 100644 (file)
@@ -155,7 +155,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;
   }