namespace crimson::osd {
PG::interruptible_future<>
-PG::SnapTrimMutex::lock(SnapTrimEvent &st_event) noexcept
+PG::BackgroundProcessLock::lock_with_op(SnapTrimEvent &st_event) noexcept
{
- return st_event.enter_stage<interruptor>(wait_pg
+ return st_event.enter_stage<interruptor>(wait
).then_interruptible([this] {
return mutex.lock();
});
return enter_stage<interruptor>(
client_pp().get_obc);
}).then_interruptible([this] {
- return pg->snaptrim_mutex.lock(*this);
+ return pg->background_process_lock.lock_with_op(*this);
}).then_interruptible([this] {
return enter_stage<interruptor>(
client_pp().process);
if (to_trim.empty()) {
// the legit ENOENT -> done
logger().debug("{}: to_trim is empty! Stopping iteration", *this);
- pg->snaptrim_mutex.unlock();
+ pg->background_process_lock.unlock();
return snap_trim_iertr::make_ready_future<seastar::stop_iteration>(
seastar::stop_iteration::yes);
}
logger().debug("{}: awaiting completion", *this);
return subop_blocker.wait_completion();
}).finally([this] {
- pg->snaptrim_mutex.unlock();
+ pg->background_process_lock.unlock();
}).si_then([this] {
if (!needs_pause) {
return interruptor::now();
CommonPGPipeline::GetOBC::BlockingEvent,
CommonPGPipeline::Process::BlockingEvent,
WaitSubop::BlockingEvent,
- PG::SnapTrimMutex::WaitPG::BlockingEvent,
+ PG::BackgroundProcessLock::Wait::BlockingEvent,
WaitTrimTimer::BlockingEvent,
CompletionEvent
> tracking_events;
- friend class PG::SnapTrimMutex;
+ friend class PG::BackgroundProcessLock;
};
// remove single object. a SnapTrimEvent can create multiple subrequests.
return std::move(fut);
}
+PG::interruptible_future<>
+PG::BackgroundProcessLock::lock() noexcept
+{
+ return interruptor::make_interruptible(mutex.lock());
+}
+
template <class Ret, class SuccessFunc, class FailureFunc>
PG::do_osd_ops_iertr::future<PG::pg_rep_op_fut_t<Ret>>
PG::do_osd_ops_execute(
private:
- struct SnapTrimMutex {
- struct WaitPG : OrderedConcurrentPhaseT<WaitPG> {
- static constexpr auto type_name = "SnapTrimEvent::wait_pg";
- } wait_pg;
+ struct BackgroundProcessLock {
+ struct Wait : OrderedConcurrentPhaseT<Wait> {
+ static constexpr auto type_name = "PG::BackgroundProcessLock::wait";
+ } wait;
seastar::shared_mutex mutex;
- interruptible_future<> lock(SnapTrimEvent &st_event) noexcept;
+ interruptible_future<> lock_with_op(SnapTrimEvent &st_event) noexcept;
+ interruptible_future<> lock() noexcept;
void unlock() noexcept {
mutex.unlock();
}
- } snaptrim_mutex;
+ } background_process_lock;
using do_osd_ops_ertr = crimson::errorator<
crimson::ct_error::eagain>;