From 34671cc66dda67a7349cb2ca86f049d7a5969fd1 Mon Sep 17 00:00:00 2001 From: luo rixin Date: Wed, 26 Apr 2023 17:07:55 +0800 Subject: [PATCH] crimson/osd: add crush_location_hook feature to crimson Signed-off-by: luo rixin --- src/crimson/osd/osd.cc | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 6ec72bf69337..4cfc8740bb53 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -55,6 +55,7 @@ #include "crimson/osd/osd_operations/recovery_subrequest.h" #include "crimson/osd/osd_operations/replicated_request.h" #include "crimson/osd/osd_operation_external_tracking.h" +#include "crimson/crush/CrushLocation.h" namespace { seastar::logger& logger() { @@ -557,15 +558,21 @@ seastar::future<> OSD::_add_me_to_crush() } }; return get_weight().then([this](auto weight) { - const crimson::crush::CrushLocation loc{make_unique().get()}; - logger().info("{} crush location is {}", __func__, loc); - string cmd = fmt::format(R"({{ - "prefix": "osd crush create-or-move", - "id": {}, - "weight": {:.4f}, - "args": [{}] - }})", whoami, weight, loc); - return monc->run_command(std::move(cmd), {}); + const crimson::crush::CrushLocation loc; + return seastar::do_with( + std::move(loc), + [this, weight] (crimson::crush::CrushLocation& loc) { + return loc.init_on_startup().then([this, weight, &loc]() { + logger().info("crush location is {}", loc); + string cmd = fmt::format(R"({{ + "prefix": "osd crush create-or-move", + "id": {}, + "weight": {:.4f}, + "args": [{}] + }})", whoami, weight, loc); + return monc->run_command(std::move(cmd), {}); + }); + }); }).then([](auto&& command_result) { [[maybe_unused]] auto [code, message, out] = std::move(command_result); if (code) { -- 2.47.3