From 7b0462fce7478cc179a78e13e1dd5bd765e98cd3 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Wed, 4 Mar 2020 17:57:29 +0800 Subject: [PATCH] crimson: add recovery operations oriented request ---- "RecoverySubRequest" Signed-off-by: Xuehan Xu --- src/crimson/osd/CMakeLists.txt | 1 + src/crimson/osd/osd_operation.h | 2 + .../osd/osd_operations/recovery_subrequest.cc | 29 ++++++++++++ .../osd/osd_operations/recovery_subrequest.h | 45 +++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 src/crimson/osd/osd_operations/recovery_subrequest.cc create mode 100644 src/crimson/osd/osd_operations/recovery_subrequest.h diff --git a/src/crimson/osd/CMakeLists.txt b/src/crimson/osd/CMakeLists.txt index ff5ba3aec6caa..02c0a5678c7f7 100644 --- a/src/crimson/osd/CMakeLists.txt +++ b/src/crimson/osd/CMakeLists.txt @@ -19,6 +19,7 @@ add_executable(crimson-osd osd_operations/pg_advance_map.cc osd_operations/replicated_request.cc osd_operations/background_recovery.cc + osd_operations/recovery_subrequest.cc pg_recovery.cc recovery_backend.cc replicated_recovery_backend.cc diff --git a/src/crimson/osd/osd_operation.h b/src/crimson/osd/osd_operation.h index 6e368384d576c..7fe092f2e92c7 100644 --- a/src/crimson/osd/osd_operation.h +++ b/src/crimson/osd/osd_operation.h @@ -30,6 +30,7 @@ enum class OperationTypeCode { pg_creation, replicated_request, background_recovery, + background_recovery_sub, last_op }; @@ -41,6 +42,7 @@ static constexpr const char* const OP_NAMES[] = { "pg_creation", "replicated_request", "background_recovery", + "background_recovery_sub", }; // prevent the addition of OperationTypeCode-s with no matching OP_NAMES entry: diff --git a/src/crimson/osd/osd_operations/recovery_subrequest.cc b/src/crimson/osd/osd_operations/recovery_subrequest.cc new file mode 100644 index 0000000000000..820c7beabc23a --- /dev/null +++ b/src/crimson/osd/osd_operations/recovery_subrequest.cc @@ -0,0 +1,29 @@ +#include +#include + +#include "crimson/osd/osd_operations/recovery_subrequest.h" + +namespace { + seastar::logger& logger() { + return crimson::get_logger(ceph_subsys_osd); + } +} + +namespace crimson::osd { + +seastar::future<> RecoverySubRequest::start() { + logger().debug("{}: start", *this); + + IRef opref = this; + return with_blocking_future(osd.osdmap_gate.wait_for_map(m->get_min_epoch())) + .then([this] (epoch_t epoch) { + return with_blocking_future(osd.wait_for_pg(m->get_spg())); + }).then([this, opref=std::move(opref)] (Ref pgref) { + return seastar::do_with(std::move(pgref), std::move(opref), + [this](auto& pgref, auto& opref) { + return pgref->get_recovery_backend()->handle_recovery_op(m); + }); + }); +} + +} diff --git a/src/crimson/osd/osd_operations/recovery_subrequest.h b/src/crimson/osd/osd_operations/recovery_subrequest.h new file mode 100644 index 0000000000000..b151e5c1dda68 --- /dev/null +++ b/src/crimson/osd/osd_operations/recovery_subrequest.h @@ -0,0 +1,45 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#pragma once + +#include "osd/osd_op_util.h" +#include "crimson/net/Connection.h" +#include "crimson/osd/osd_operation.h" +#include "crimson/osd/osd.h" +#include "crimson/common/type_helpers.h" +#include "messages/MOSDPGPull.h" +#include "messages/MOSDPGPush.h" +#include "messages/MOSDPGPushReply.h" +#include "messages/MOSDPGRecoveryDelete.h" +#include "messages/MOSDPGRecoveryDeleteReply.h" + +namespace crimson::osd { + +class OSD; +class PG; + +class RecoverySubRequest final : public OperationT { +public: + static constexpr OperationTypeCode type = OperationTypeCode::background_recovery_sub; + + RecoverySubRequest(OSD &osd, crimson::net::ConnectionRef conn, Ref&& m) + : osd(osd), conn(conn), m(m) {} + + void print(std::ostream& out) const final + { + out << *m; + } + + void dump_detail(Formatter *f) const final + { + } + + seastar::future<> start(); +private: + OSD& osd; + crimson::net::ConnectionRef conn; + Ref m; +}; + +} -- 2.39.5