From: Radosław Zarzyński Date: Wed, 13 Apr 2022 07:22:22 +0000 (+0200) Subject: crimson/osd: dissect PG::WaitForActiveBlocker into PGActivationBlocker X-Git-Tag: v18.0.0~947^2~26 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1c1663d731a56d605e60b7c4dc25be65c1dd16bc;p=ceph.git crimson/osd: dissect PG::WaitForActiveBlocker into PGActivationBlocker Signed-off-by: Radosław Zarzyński --- diff --git a/src/crimson/osd/CMakeLists.txt b/src/crimson/osd/CMakeLists.txt index 324d091931d6..b215c12e3a95 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 a9caa5a3dd45..4b0bdc0c8a93 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 af3598fc1ba0..699627da4263 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 000000000000..504754a8ddcd --- /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 000000000000..4b5254fd26a8 --- /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