From 5ca56072c31b780790838914ef411a80d9d5ec1a Mon Sep 17 00:00:00 2001 From: David Zafman Date: Fri, 23 Feb 2018 12:06:05 -0800 Subject: [PATCH] osd: Remove partially created pg known as DNE Fixes: http://tracker.ceph.com/issues/21833 Signed-off-by: David Zafman --- src/osd/OSD.cc | 18 ++++++++++++++++++ src/osd/PG.h | 1 + 2 files changed, 19 insertions(+) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 837b05c312e..7ee311596d5 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 ee3df4a958f..a167e75bbe0 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; -- 2.39.5