From: Kefu Chai Date: Thu, 21 Jan 2021 12:40:06 +0000 (+0800) Subject: crimson/mon: add mon::Client::wait_for_config() X-Git-Tag: v17.0.0~4^2~6 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=9a248da3feedc2b7e3de0c7c5c585e030568681c;p=ceph.git crimson/mon: add mon::Client::wait_for_config() just for waiting for monmap and config from mon. crimson-osd needs this for populating settings related to booting and transport layer before it starts. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/mon/MonClient.cc b/src/crimson/mon/MonClient.cc index defa03f3422c9..4d66fd9792da5 100644 --- a/src/crimson/mon/MonClient.cc +++ b/src/crimson/mon/MonClient.cc @@ -894,7 +894,11 @@ seastar::future<> Client::handle_log_ack(Ref m) seastar::future<> Client::handle_config(Ref m) { - return crimson::common::local_conf().set_mon_vals(m->config); + return crimson::common::local_conf().set_mon_vals(m->config).then([this] { + if (config_updated) { + config_updated->set_value(); + } + }); } std::vector Client::get_random_mons(unsigned n) const @@ -1110,6 +1114,13 @@ seastar::future<> Client::renew_subs() }); } +seastar::future<> Client::wait_for_config() +{ + assert(!config_updated); + config_updated = seastar::promise<>(); + return config_updated->get_future(); +} + void Client::print(std::ostream& out) const { out << "mon." << entity_name; diff --git a/src/crimson/mon/MonClient.h b/src/crimson/mon/MonClient.h index e7d2df8639303..7e13846039b0c 100644 --- a/src/crimson/mon/MonClient.h +++ b/src/crimson/mon/MonClient.h @@ -90,6 +90,7 @@ public: void sub_unwant(const std::string& what); bool sub_want_increment(const std::string& what, version_t start, unsigned flags); seastar::future<> renew_subs(); + seastar::future<> wait_for_config(); void print(std::ostream&) const; private: @@ -173,6 +174,7 @@ private: seastar::promise<> pr; }; std::deque pending_messages; + std::optional> config_updated; }; inline std::ostream& operator<<(std::ostream& out, const Client& client) {