From 24711cd49f85dbe827d41c4bcad2700cd6c42ad7 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 15 Oct 2013 13:11:29 -0700 Subject: [PATCH] OSD: ping tphandle during pg removal Fixes: #6528 Signed-off-by: Samuel Just Reviewed-by: Sage Weil (cherry picked from commit c658258d9e2f590054a30c0dee14a579a51bda8c) Conflicts: src/osd/OSD.cc --- src/osd/OSD.cc | 18 ++++++++++++++---- src/osd/OSD.h | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index c847faad8bf..53ae5fdbe1d 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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 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 item) +void OSD::RemoveWQ::_process( + pair item, + ThreadPool::TPHandle &handle) { PGRef pg(item.first); SnapMapper &mapper = pg->snap_mapper; @@ -3324,12 +3332,14 @@ void OSD::RemoveWQ::_process(pair 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; diff --git a/src/osd/OSD.h b/src/osd/OSD.h index c14636c5154..d271a20d0b7 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1638,7 +1638,7 @@ protected: remove_queue.pop_front(); return item; } - void _process(pair); + void _process(pair, ThreadPool::TPHandle &); void _clear() { remove_queue.clear(); } -- 2.47.3