]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: ensure that OpSequencer lives through on_commit callback
authorSamuel Just <sam.just@inktank.com>
Thu, 5 Jul 2012 17:12:26 +0000 (10:12 -0700)
committerSamuel Just <sam.just@inktank.com>
Fri, 6 Jul 2012 00:18:55 +0000 (17:18 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc

index 2c22674c1d783fb779a15efd5510057b0afd8f51..91c0d578c3176b1efc4cc0dbe0be1292ebce3608 100644 (file)
@@ -1942,7 +1942,8 @@ void OSD::RemoveWQ::_process(boost::tuple<coll_t, SequencerRef, DeletingStateRef
     if (num % 20 == 0) {
       store->queue_transaction(
        osr, t,
-       new ObjectStore::C_DeleteTransactionHolder<SequencerRef>(t, item->get<1>()));
+       new ObjectStore::C_DeleteTransactionHolder<SequencerRef>(t, item->get<1>()),
+       new ContainerContext<SequencerRef>(item->get<1>()));
       t = new ObjectStore::Transaction;
     }
     t->remove(coll, *i);
@@ -1950,7 +1951,8 @@ void OSD::RemoveWQ::_process(boost::tuple<coll_t, SequencerRef, DeletingStateRef
   t->remove_collection(coll);
   store->queue_transaction(
     osr, t,
-    new ObjectStore::C_DeleteTransactionHolder<SequencerRef>(t, item->get<1>()));
+    new ObjectStore::C_DeleteTransactionHolder<SequencerRef>(t, item->get<1>()),
+    new ContainerContext<SequencerRef>(item->get<1>()));
   delete item;
 }
 // =========================================
@@ -4718,7 +4720,9 @@ void OSD::_remove_pg(PG *pg)
   store->queue_transaction(
     pg->osr.get(), rmt,
     new ObjectStore::C_DeleteTransactionHolder<
-      SequencerRef>(rmt, pg->osr));
+      SequencerRef>(rmt, pg->osr),
+    new ContainerContext<
+      SequencerRef>(pg->osr));
 
   // on_removal, which calls remove_watchers_and_notifies, and the erasure from 
   // the pg_map must be done together without unlocking the pg lock,