summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-10-15 13:11:29 -0700
committerSamuel Just <sam.just@inktank.com>2013-10-15 13:16:10 -0700
commit19a732757ee6fa82c699b28a89b7fb38bf61ed90 (patch)
tree7a86bc609f2b91632344d1500b60573450e04506
parent8d7dbf85472cfca9268d81ecf057ea078cf345b3 (diff)
downloadceph-wip-6528.tar.gz
OSD: ping tphandle during pg removalwip-6528
Fixes: #6528 Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/osd/OSD.cc15
-rw-r--r--src/osd/OSD.h2
2 files changed, 13 insertions, 4 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;
}
diff --git a/src/osd/OSD.h b/src/osd/OSD.h
index 9346cee6890..f7559da3be5 100644
--- a/src/osd/OSD.h
+++ b/src/osd/OSD.h
@@ -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();
}