diff options
author | Samuel Just <sam.just@inktank.com> | 2013-10-15 13:11:29 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-10-15 13:16:10 -0700 |
commit | 19a732757ee6fa82c699b28a89b7fb38bf61ed90 (patch) | |
tree | 7a86bc609f2b91632344d1500b60573450e04506 /src/osd/OSD.cc | |
parent | 8d7dbf85472cfca9268d81ecf057ea078cf345b3 (diff) | |
download | ceph-wip-6528.tar.gz |
OSD: ping tphandle during pg removalwip-6528
Fixes: #6528
Signed-off-by: Samuel Just <sam.just@inktank.com>
Diffstat (limited to 'src/osd/OSD.cc')
-rw-r--r-- | src/osd/OSD.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 8ce11bb558c..830f5cb7c35 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3274,13 +3274,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, @@ -3302,7 +3304,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; @@ -3318,14 +3322,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; @@ -3342,7 +3350,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; } |