From: David Zafman Date: Fri, 23 Feb 2018 20:06:05 +0000 (-0800) Subject: osd: Remove partially created pg known as DNE X-Git-Tag: v13.0.2~182^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5ca56072c31b780790838914ef411a80d9d5ec1a;p=ceph.git osd: Remove partially created pg known as DNE Fixes: http://tracker.ceph.com/issues/21833 Signed-off-by: David Zafman --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 837b05c312e1a..7ee311596d50f 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4008,6 +4008,24 @@ void OSD::load_pgs() // read pg state, log pg->read_state(store); + if (pg->dne()) { + dout(10) << "load_pgs " << *it << " deleting dne" << dendl; + pg->ch = nullptr; + service.pg_remove_epoch(pg->pg_id); + pg->unlock(); + { + // Delete pg + RWLock::WLocker l(pg_map_lock); + auto p = pg_map.find(pg->get_pgid()); + assert(p != pg_map.end() && p->second == pg); + dout(20) << __func__ << " removed pg " << pg << " from pg_map" << dendl; + pg_map.erase(p); + pg->put("PGMap"); + } + recursive_remove_collection(cct, store, pgid, *it); + continue; + } + service.init_splits_between(pg->pg_id, pg->get_osdmap(), osdmap); pg->reg_next_scrub(); diff --git a/src/osd/PG.h b/src/osd/PG.h index ee3df4a958f5c..a167e75bbe0f6 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -853,6 +853,7 @@ protected: }; public: + bool dne() { return info.dne(); } struct RecoveryCtx { utime_t start_time; map > *query_map;