]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: ping tphandle during pg removal 1357/head
authorSamuel Just <sam.just@inktank.com>
Tue, 15 Oct 2013 20:11:29 +0000 (13:11 -0700)
committerSamuel Just <sam.just@inktank.com>
Tue, 4 Mar 2014 00:35:40 +0000 (16:35 -0800)
Fixes: #6528
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
(cherry picked from commit c658258d9e2f590054a30c0dee14a579a51bda8c)

Conflicts:
src/osd/OSD.cc

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

index c847faad8bf4f82331f7254364eea1ef0675a81c..53ae5fdbe1d64f98d69cb7749406651263fc1f2c 100644 (file)
@@ -3260,13 +3260,15 @@ bool remove_dir(
   ObjectStore *store, SnapMapper *mapper,
   OSDriver *osdriver,
   ObjectStore::Sequencer *osr,
-  coll_t coll, DeletingStateRef dstate)
+  coll_t coll, DeletingStateRef dstate,
+  ThreadPool::TPHandle &handle)
 {
   vector<hobject_t> olist;
   int64_t num = 0;
   ObjectStore::Transaction *t = new ObjectStore::Transaction;
   hobject_t next;
   while (!next.is_max()) {
+    handle.reset_tp_timeout();
     store->collection_list_partial(
       coll,
       next,
@@ -3288,7 +3290,9 @@ bool remove_dir(
        C_SaferCond waiter;
        store->queue_transaction(osr, t, &waiter);
        bool cont = dstate->pause_clearing();
+       handle.suspend_tp_timeout();
        waiter.wait();
+       handle.reset_tp_timeout();
        if (cont)
          cont = dstate->resume_clearing();
        delete t;
@@ -3304,14 +3308,18 @@ bool remove_dir(
   C_SaferCond waiter;
   store->queue_transaction(osr, t, &waiter);
   bool cont = dstate->pause_clearing();
+  handle.suspend_tp_timeout();
   waiter.wait();
+  handle.reset_tp_timeout();
   if (cont)
     cont = dstate->resume_clearing();
   delete t;
   return cont;
 }
 
-void OSD::RemoveWQ::_process(pair<PGRef, DeletingStateRef> item)
+void OSD::RemoveWQ::_process(
+  pair<PGRef, DeletingStateRef> item,
+  ThreadPool::TPHandle &handle)
 {
   PGRef pg(item.first);
   SnapMapper &mapper = pg->snap_mapper;
@@ -3324,12 +3332,14 @@ void OSD::RemoveWQ::_process(pair<PGRef, DeletingStateRef> item)
 
   if (pg->have_temp_coll()) {
     bool cont = remove_dir(
-      store, &mapper, &driver, pg->osr.get(), pg->get_temp_coll(), item.second);
+      store, &mapper, &driver, pg->osr.get(), pg->get_temp_coll(), item.second,
+      handle);
     if (!cont)
       return;
   }
   bool cont = remove_dir(
-    store, &mapper, &driver, pg->osr.get(), coll, item.second);
+    store, &mapper, &driver, pg->osr.get(), coll, item.second,
+    handle);
   if (!cont)
     return;
 
index c14636c5154cb3191977a767aa3846326833cca5..d271a20d0b743f68f094199a84c15222c5c9dc77 100644 (file)
@@ -1638,7 +1638,7 @@ protected:
       remove_queue.pop_front();
       return item;
     }
-    void _process(pair<PGRef, DeletingStateRef>);
+    void _process(pair<PGRef, DeletingStateRef>, ThreadPool::TPHandle &);
     void _clear() {
       remove_queue.clear();
     }