]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Remove partially created pg known as DNE 20571/head
authorDavid Zafman <dzafman@redhat.com>
Fri, 23 Feb 2018 20:06:05 +0000 (12:06 -0800)
committerDavid Zafman <dzafman@redhat.com>
Mon, 26 Feb 2018 15:55:39 +0000 (07:55 -0800)
Fixes: http://tracker.ceph.com/issues/21833
Signed-off-by: David Zafman <dzafman@redhat.com>
src/osd/OSD.cc
src/osd/PG.h

index 837b05c312e1a948d361b73057516fbfa61c3d55..7ee311596d50f024f912922dec6f41339bf41f5a 100644 (file)
@@ -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();
index ee3df4a958f5c691dafbddf3c3a1d2129dca3450..a167e75bbe0f66d7bc1951f5802d162683c86012 100644 (file)
@@ -853,6 +853,7 @@ protected:
   };
 
 public:
+  bool dne() { return info.dne(); }
   struct RecoveryCtx {
     utime_t start_time;
     map<int, map<spg_t, pg_query_t> > *query_map;