From 24bd5fb2946053c2291619348183d0b12224fffa Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 14 Jul 2020 18:39:31 -0400 Subject: [PATCH] neorados: allow a client to wait for the latest OSD map This is required when issuing a client blacklist to ensure that they cannot overwrite any OSD data before their map updates. Signed-off-by: Jason Dillaman --- src/include/neorados/RADOS.hpp | 10 ++++++++++ src/neorados/RADOS.cc | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/include/neorados/RADOS.hpp b/src/include/neorados/RADOS.hpp index 98bed7625add8..45932e1635462 100644 --- a/src/include/neorados/RADOS.hpp +++ b/src/include/neorados/RADOS.hpp @@ -941,6 +941,15 @@ public: std::move(init.completion_handler))); return init.result.get(); } + + template + auto wait_for_latest_osd_map(CompletionToken&& token) { + boost::asio::async_completion init(token); + wait_for_latest_osd_map( + SimpleOpComp::create(get_executor(), std::move(init.completion_handler))); + return init.result.get(); + } + uint64_t instance_id() const; private: @@ -1073,6 +1082,7 @@ private: void enable_application(std::string_view pool, std::string_view app_name, bool force, std::unique_ptr c); + void wait_for_latest_osd_map(std::unique_ptr c); // Proxy object to provide access to low-level RADOS messaging clients std::unique_ptr impl; diff --git a/src/neorados/RADOS.cc b/src/neorados/RADOS.cc index d01c67ae8bd54..54e2a23e1a859 100644 --- a/src/neorados/RADOS.cc +++ b/src/neorados/RADOS.cc @@ -1558,6 +1558,10 @@ void RADOS::enable_application(std::string_view pool, std::string_view app_name, } } +void RADOS::wait_for_latest_osd_map(std::unique_ptr c) { + impl->objecter->wait_for_latest_osdmap(std::move(c)); +} + void RADOS::mon_command(std::vector command, const cb::list& bl, std::string* outs, cb::list* outbl, -- 2.39.5