From 964e5a7121be13d207f061a282c903295c482e09 Mon Sep 17 00:00:00 2001 From: Aishwarya Mathuria Date: Wed, 6 Dec 2023 22:28:29 +0530 Subject: [PATCH] src/crimson: Add support for the OSD to receive config changes 1. Adds MMgrReport message in manager client 2. MonClient subscribes to config Fixes: https://tracker.ceph.com/issues/59241 Signed-off-by: Aishwarya Mathuria --- src/crimson/mgr/client.cc | 32 +++++++++++++++++++++++++++++++- src/crimson/mgr/client.h | 3 +++ src/crimson/mon/MonClient.cc | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/crimson/mgr/client.cc b/src/crimson/mgr/client.cc index 169915c9eb3b2..d2a1ea5136a00 100644 --- a/src/crimson/mgr/client.cc +++ b/src/crimson/mgr/client.cc @@ -11,6 +11,7 @@ #include "messages/MMgrConfigure.h" #include "messages/MMgrMap.h" #include "messages/MMgrOpen.h" +#include "messages/MMgrReport.h" namespace { seastar::logger& logger() @@ -156,9 +157,10 @@ seastar::future<> Client::handle_mgr_conf(crimson::net::ConnectionRef, void Client::report() { + _send_report(); gate.dispatch_in_background(__func__, *this, [this] { if (!conn) { - logger().warn("report: no conn available; raport skipped"); + logger().warn("report: no conn available; report skipped"); return seastar::now(); } return with_stats.get_stats( @@ -168,6 +170,34 @@ void Client::report() }); } +void Client::_send_report() +{ + // TODO: implement daemon_health_metrics support + // https://tracker.ceph.com/issues/63766 + gate.dispatch_in_background(__func__, *this, [this] { + if (!conn) { + logger().warn("cannot send report; no conn available"); + return seastar::now(); + } + auto report = make_message(); + // Adding empty information since we don't support perfcounters yet + report->undeclare_types.emplace_back(); + ENCODE_START(1, 1, report->packed); + report->declare_types.emplace_back(); + ENCODE_FINISH(report->packed); + + if (daemon_name.size()) { + report->daemon_name = daemon_name; + } else { + report->daemon_name = local_conf()->name.get_id(); + } + report->service_name = service_name; + local_conf().get_config_bl(last_config_bl_version, &report->config_bl, + &last_config_bl_version); + return conn->send(std::move(report)); + }); +} + void Client::print(std::ostream& out) const { out << "mgrc "; diff --git a/src/crimson/mgr/client.h b/src/crimson/mgr/client.h index b88c60c5e4a47..7f4e62fd7d2d3 100644 --- a/src/crimson/mgr/client.h +++ b/src/crimson/mgr/client.h @@ -57,6 +57,9 @@ private: seastar::timer report_timer; crimson::common::Gated gate; uint64_t last_config_bl_version = 0; + std::string service_name, daemon_name; + + void _send_report(); }; inline std::ostream& operator<<(std::ostream& out, const Client& client) { diff --git a/src/crimson/mon/MonClient.cc b/src/crimson/mon/MonClient.cc index 7be09915a9461..761c6b1a5c857 100644 --- a/src/crimson/mon/MonClient.cc +++ b/src/crimson/mon/MonClient.cc @@ -432,6 +432,7 @@ Client::~Client() = default; seastar::future<> Client::start() { entity_name = crimson::common::local_conf()->name; auth_registry.refresh_config(); + sub.want("config", 0, 0); return load_keyring().then([this] { return monmap.build_initial(crimson::common::local_conf(), false); }).then([this] { -- 2.39.5