]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: ping tphandle during pg removal
authorSamuel Just <sam.just@inktank.com>
Tue, 15 Oct 2013 20:11:29 +0000 (13:11 -0700)
committerSamuel Just <sam.just@inktank.com>
Tue, 15 Oct 2013 22:16:56 +0000 (15:16 -0700)
Fixes: #6528
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc
src/osd/OSD.h

index b2aa2ebbcd219419aff8751eb78b5ca455607f2a..d450fd543e6b089f4fc56169ed235324d81cf411 100644 (file)
@@ -3278,13 +3278,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<ghobject_t> olist;
   int64_t num = 0;
   ObjectStore::Transaction *t = new ObjectStore::Transaction;
   ghobject_t next;
   while (!next.is_max()) {
+    handle.reset_tp_timeout();
     store->collection_list_partial(
       coll,
       next,
@@ -3306,7 +3308,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;
@@ -3322,14 +3326,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;
@@ -3346,7 +3354,8 @@ void OSD::RemoveWQ::_process(pair<PGRef, DeletingStateRef> item)
        i != colls_to_remove.end();
        ++i) {
     bool cont = remove_dir(
-      pg->cct, store, &mapper, &driver, pg->osr.get(), *i, item.second);
+      pg->cct, store, &mapper, &driver, pg->osr.get(), *i, item.second,
+      handle);
     if (!cont)
       return;
   }
index 9346cee6890a9d21688862686a50875637ccca29..f7559da3be53a7b382ad6d7955edb942cd7ebcf6 100644 (file)
@@ -1681,7 +1681,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();
     }