]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Remove partially created pg known as DNE 20668/head
authorDavid Zafman <dzafman@redhat.com>
Fri, 23 Feb 2018 20:06:05 +0000 (12:06 -0800)
committerPrashant D <pdhange@redhat.com>
Tue, 27 Mar 2018 03:16:58 +0000 (23:16 -0400)
Fixes: http://tracker.ceph.com/issues/21833
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 5ca56072c31b780790838914ef411a80d9d5ec1a)

Conflicts:
src/osd/OSD.cc: Resolved in load_pgs
src/osd/PG.h

src/osd/OSD.cc
src/osd/PG.h

index b666e980891a7e05c6820191cd587f9cc6d25aae..3f721f31355e66b212adcaffa1b2cce8b96712c9 100644 (file)
@@ -4024,6 +4024,24 @@ void OSD::load_pgs()
       pg->upgrade(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->info.pgid, pg->get_osdmap(), osdmap);
 
     // generate state for PG's current mapping
index 884fafd99282959d5ed5bbf10034f3e6c8bdaaa1..37cbf454e72d92b541afd6d3d7fa54146b2549af 100644 (file)
@@ -629,6 +629,8 @@ public:
     map<int, vector<pair<pg_notify_t, PastIntervals> > > notify_list;
   };
 
+public:
+  bool dne() { return info.dne(); }
   struct RecoveryCtx {
     utime_t start_time;
     map<int, map<spg_t, pg_query_t> > *query_map;