]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: queue pg deletion after on_removal txn 903/head
authorSage Weil <sage@inktank.com>
Fri, 6 Dec 2013 06:11:41 +0000 (22:11 -0800)
committerSage Weil <sage@inktank.com>
Fri, 6 Dec 2013 07:13:28 +0000 (23:13 -0800)
The removal is normally so slow that these don't really race, but they
could.

Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc

index b6c52fb33ed6c3ee24adee1de892492f33399143..32a548fbe03fed1d758ef3996e4346f97fe27d07 100644 (file)
@@ -6672,6 +6672,13 @@ void OSD::_remove_pg(PG *pg)
 
   service.cancel_pending_splits_for_parent(pg->info.pgid);
 
+  store->queue_transaction(
+    pg->osr.get(), rmt,
+    new ObjectStore::C_DeleteTransactionHolder<
+      SequencerRef>(rmt, pg->osr),
+    new ContainerContext<
+      SequencerRef>(pg->osr));
+
   DeletingStateRef deleting = service.deleting_pgs.lookup_or_create(
     pg->info.pgid,
     make_pair(
@@ -6680,13 +6687,6 @@ void OSD::_remove_pg(PG *pg)
     );
   remove_wq.queue(make_pair(PGRef(pg), deleting));
 
-  store->queue_transaction(
-    pg->osr.get(), rmt,
-    new ObjectStore::C_DeleteTransactionHolder<
-      SequencerRef>(rmt, pg->osr),
-    new ContainerContext<
-      SequencerRef>(pg->osr));
-
   // remove from map
   pg_map.erase(pg->info.pgid);
   pg->put("PGMap"); // since we've taken it out of map