From 1c1663d731a56d605e60b7c4dc25be65c1dd16bc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Zarzy=C5=84ski?= Date: Wed, 13 Apr 2022 09:22:22 +0200 Subject: [PATCH] crimson/osd: dissect PG::WaitForActiveBlocker into PGActivationBlocker MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Radosław Zarzyński --- src/crimson/osd/CMakeLists.txt | 1 + src/crimson/osd/pg.cc | 26 ------------------ src/crimson/osd/pg.h | 19 ++----------- src/crimson/osd/pg_activation_blocker.cc | 35 ++++++++++++++++++++++++ src/crimson/osd/pg_activation_blocker.h | 34 +++++++++++++++++++++++ 5 files changed, 72 insertions(+), 43 deletions(-) create mode 100644 src/crimson/osd/pg_activation_blocker.cc create mode 100644 src/crimson/osd/pg_activation_blocker.h diff --git a/src/crimson/osd/CMakeLists.txt b/src/crimson/osd/CMakeLists.txt index 324d091931d..b215c12e3a9 100644 --- a/src/crimson/osd/CMakeLists.txt +++ b/src/crimson/osd/CMakeLists.txt @@ -28,6 +28,7 @@ add_executable(crimson-osd scheduler/scheduler.cc scheduler/mclock_scheduler.cc osdmap_gate.cc + pg_activation_blocker.cc pg_map.cc pg_interval_interrupt_condition.cc objclass.cc diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index a9caa5a3dd4..4b0bdc0c8a9 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -542,32 +542,6 @@ std::ostream& operator<<(std::ostream& os, const PG& pg) return os; } -void PG::WaitForActiveBlocker::dump_detail(Formatter *f) const -{ - f->dump_stream("pgid") << pg->pgid; -} - -void PG::WaitForActiveBlocker::on_active() -{ - p.set_value(); - p = {}; -} - -blocking_future<> PG::WaitForActiveBlocker::wait() -{ - if (pg->peering_state.is_active()) { - return make_blocking_future(seastar::now()); - } else { - return make_blocking_future(p.get_shared_future()); - } -} - -seastar::future<> PG::WaitForActiveBlocker::stop() -{ - p.set_exception(crimson::common::system_shutdown_exception()); - return seastar::now(); -} - std::tuple, PG::interruptible_future<>> PG::submit_transaction( diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index af3598fc1ba..699627da426 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -31,6 +31,7 @@ #include "crimson/osd/osd_operations/background_recovery.h" #include "crimson/osd/shard_services.h" #include "crimson/osd/osdmap_gate.h" +#include "crimson/osd/pg_activation_blocker.h" #include "crimson/osd/pg_recovery.h" #include "crimson/osd/pg_recovery_listener.h" #include "crimson/osd/recovery_backend.h" @@ -721,23 +722,7 @@ private: // continuations here. bool stopping = false; - class WaitForActiveBlocker : public BlockerT { - PG *pg; - - const spg_t pgid; - seastar::shared_promise<> p; - - protected: - void dump_detail(Formatter *f) const; - - public: - static constexpr const char *type_name = "WaitForActiveBlocker"; - - WaitForActiveBlocker(PG *pg) : pg(pg) {} - void on_active(); - blocking_future<> wait(); - seastar::future<> stop(); - } wait_for_active_blocker; + PGActivationBlocker wait_for_active_blocker; friend std::ostream& operator<<(std::ostream&, const PG& pg); friend class ClientRequest; diff --git a/src/crimson/osd/pg_activation_blocker.cc b/src/crimson/osd/pg_activation_blocker.cc new file mode 100644 index 00000000000..504754a8ddc --- /dev/null +++ b/src/crimson/osd/pg_activation_blocker.cc @@ -0,0 +1,35 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*- +// vim: ts=8 sw=2 smarttab expandtab + +#include "crimson/osd/pg.h" +#include "crimson/osd/pg_activation_blocker.h" + +namespace crimson::osd { + +void PGActivationBlocker::dump_detail(Formatter *f) const +{ + f->dump_stream("pgid") << pg->get_pgid(); +} + +void PGActivationBlocker::on_active() +{ + p.set_value(); + p = {}; +} + +blocking_future<> PGActivationBlocker::wait() +{ + if (pg->get_peering_state().is_active()) { + return make_blocking_future(seastar::now()); + } else { + return make_blocking_future(p.get_shared_future()); + } +} + +seastar::future<> PGActivationBlocker::stop() +{ + p.set_exception(crimson::common::system_shutdown_exception()); + return seastar::now(); +} + +} // namespace crimson::osd diff --git a/src/crimson/osd/pg_activation_blocker.h b/src/crimson/osd/pg_activation_blocker.h new file mode 100644 index 00000000000..4b5254fd26a --- /dev/null +++ b/src/crimson/osd/pg_activation_blocker.h @@ -0,0 +1,34 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*- +// vim: ts=8 sw=2 smarttab expandtab + +#pragma once + +#include +#include + +#include "crimson/common/operation.h" +#include "crimson/osd/osd_operation.h" + +namespace crimson::osd { + +class PG; + +class PGActivationBlocker : public crimson::BlockerT { + PG *pg; + + const spg_t pgid; + seastar::shared_promise<> p; + +protected: + void dump_detail(Formatter *f) const; + +public: + static constexpr const char *type_name = "PGActivationBlocker"; + + PGActivationBlocker(PG *pg) : pg(pg) {} + void on_active(); + blocking_future<> wait(); + seastar::future<> stop(); +}; + +} // namespace crimson::osd -- 2.39.5