From b03ab045e95a602305720878c38f616166b82d40 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Thu, 22 Dec 2022 15:32:49 +0000 Subject: [PATCH] crimson/osd: handle snap trim's interruption as any other error Signed-off-by: Radoslaw Zarzynski --- src/crimson/osd/osd_operations/snaptrim_event.cc | 14 ++++++-------- src/crimson/osd/osd_operations/snaptrim_event.h | 8 ++++++-- src/crimson/osd/pg.cc | 4 ++++ 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index 09f7e1f6f5828..fc08cefa3d754 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -70,7 +70,7 @@ void SnapTrimEvent::dump_detail(Formatter *f) const f->close_section(); } -SnapTrimEvent::remove_or_update_ertr::future +SnapTrimEvent::snap_trim_ertr::future SnapTrimEvent::start() { logger().debug("{}: {}", *this, __func__); @@ -87,7 +87,7 @@ CommonPGPipeline& SnapTrimEvent::pp() return pg->request_pg_pipeline; } -SnapTrimEvent::remove_or_update_ertr::future +SnapTrimEvent::snap_trim_ertr::future SnapTrimEvent::with_pg( ShardServices &shard_services, Ref _pg) { @@ -138,7 +138,7 @@ SnapTrimEvent::with_pg( }).then_interruptible([&shard_services, this] (const auto& to_trim) { if (to_trim.empty()) { // the legit ENOENT -> done - return remove_or_update_iertr::make_ready_future( + return snap_trim_iertr::make_ready_future( seastar::stop_iteration::yes); } for (const auto& object : to_trim) { @@ -176,16 +176,14 @@ SnapTrimEvent::with_pg( }); }).safe_then_interruptible([this] { logger().debug("{}: all completed", *this); - return remove_or_update_iertr::make_ready_future( + return snap_trim_iertr::make_ready_future( seastar::stop_iteration::no); }); }); }); - }, [this](std::exception_ptr eptr) { - // TODO: better debug output + }, [this](std::exception_ptr eptr) -> snap_trim_ertr::future { logger().debug("{}: interrupted {}", *this, eptr); - return remove_or_update_ertr::make_ready_future( - seastar::stop_iteration::no); + return crimson::ct_error::eagain::make(); }, pg); } diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index 714d2ff3af21a..1ed95f68ce1f9 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -35,6 +35,10 @@ public: using remove_or_update_iertr = crimson::interruptible::interruptible_errorator< IOInterruptCondition, remove_or_update_ertr>; + using snap_trim_ertr = remove_or_update_ertr::extend< + crimson::ct_error::eagain>; + using snap_trim_iertr = remove_or_update_iertr::extend< + crimson::ct_error::eagain>; static constexpr OperationTypeCode type = OperationTypeCode::snaptrim_event; @@ -49,8 +53,8 @@ public: void print(std::ostream &) const final; void dump_detail(ceph::Formatter* f) const final; - remove_or_update_ertr::future start(); - remove_or_update_ertr::future with_pg( + snap_trim_ertr::future start(); + snap_trim_ertr::future with_pg( ShardServices &shard_services, Ref pg); private: diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 6bab7c2cf819a..9044cd393e6b9 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -478,6 +478,10 @@ void PG::on_active_actmap() publish_stats_to_osd(); return seastar::make_ready_future( seastar::stop_iteration::yes); + }), crimson::ct_error::eagain::handle([this] { + logger().info("{}: EAGAIN saw, trimming restarted", *this); + return seastar::make_ready_future( + seastar::stop_iteration::no); }) ); }).then([this, trimmed=to_trim] { -- 2.39.5