From 957b1c247c25713297c5d72964f553a8014f81ef Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 3 Aug 2021 18:30:34 +0800 Subject: [PATCH] tools/ceph-dencoder: extract denc_plugin.h out to prepare for the upcoming change to hold the encoders in DencoderPlugin Signed-off-by: Kefu Chai --- src/tools/ceph-dencoder/ceph_dencoder.cc | 41 ++-------------------- src/tools/ceph-dencoder/denc_plugin.h | 44 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 39 deletions(-) create mode 100644 src/tools/ceph-dencoder/denc_plugin.h diff --git a/src/tools/ceph-dencoder/ceph_dencoder.cc b/src/tools/ceph-dencoder/ceph_dencoder.cc index eb42d9e226044..30e7eef945a7d 100644 --- a/src/tools/ceph-dencoder/ceph_dencoder.cc +++ b/src/tools/ceph-dencoder/ceph_dencoder.cc @@ -13,7 +13,6 @@ */ -#include #include #include @@ -24,6 +23,7 @@ #include "common/Formatter.h" #include "common/ceph_argparse.h" #include "common/errno.h" +#include "denc_plugin.h" #include "denc_registry.h" #define MB(m) ((m) * 1024 * 1024) @@ -60,44 +60,6 @@ void usage(ostream &out) out << " is_deterministic exit w/ success if type encodes deterministically\n"; } -static constexpr string_view REGISTER_DENCODERS_FUNCTION = "register_dencoders\0"; - -class DencoderPlugin { -public: - DencoderPlugin(const fs::path& path) { - mod = dlopen(path.c_str(), RTLD_NOW); - if (mod == nullptr) { - std::cerr << "failed to dlopen(" << path << "): " << dlerror() << std::endl; - } - } - ~DencoderPlugin() { -#if !defined(__FreeBSD__) - if (mod) { - dlclose(mod); - } -#endif - } - int register_dencoders(DencoderRegistry& registry) { - assert(mod); - using register_dencoders_t = void (*)(DencoderRegistry&); - const auto do_register = - reinterpret_cast(dlsym(mod, REGISTER_DENCODERS_FUNCTION.data())); - if (do_register == nullptr) { - std::cerr << "failed to dlsym(" << REGISTER_DENCODERS_FUNCTION << ")" << std::endl; - return -1; - } - const unsigned nr_before = registry.get().size(); - do_register(registry); - const unsigned nr_after = registry.get().size(); - return nr_after - nr_before; - } - bool good() const { - return mod != nullptr; - } -private: - void *mod = nullptr; -}; - vector load_plugins(DencoderRegistry& registry) { fs::path mod_dir{CEPH_DENC_MOD_DIR}; @@ -126,6 +88,7 @@ vector load_plugins(DencoderRegistry& registry) std::cerr << "fail to load dencoders from " << entry << std::endl; continue; } + std::cout << "load " << n << " from " << entry << std::endl; dencoder_plugins.push_back(std::move(plugin)); } return dencoder_plugins; diff --git a/src/tools/ceph-dencoder/denc_plugin.h b/src/tools/ceph-dencoder/denc_plugin.h new file mode 100644 index 0000000000000..1a0834ec766a7 --- /dev/null +++ b/src/tools/ceph-dencoder/denc_plugin.h @@ -0,0 +1,44 @@ +#include +#include + +#include "denc_registry.h" + +namespace fs = std::filesystem; + +class DencoderPlugin { +public: + DencoderPlugin(const fs::path& path) { + mod = dlopen(path.c_str(), RTLD_NOW); + if (mod == nullptr) { + std::cerr << "failed to dlopen(" << path << "): " << dlerror() << std::endl; + } + } + ~DencoderPlugin() { +#if !defined(__FreeBSD__) + if (mod) { + dlclose(mod); + } +#endif + } + int register_dencoders(DencoderRegistry& registry) { + static constexpr string_view REGISTER_DENCODERS_FUNCTION = "register_dencoders\0"; + + assert(mod); + using register_dencoders_t = void (*)(DencoderRegistry&); + const auto do_register = + reinterpret_cast(dlsym(mod, REGISTER_DENCODERS_FUNCTION.data())); + if (do_register == nullptr) { + std::cerr << "failed to dlsym(" << REGISTER_DENCODERS_FUNCTION << ")" << std::endl; + return -1; + } + const unsigned nr_before = registry.get().size(); + do_register(registry); + const unsigned nr_after = registry.get().size(); + return nr_after - nr_before; + } + bool good() const { + return mod != nullptr; + } +private: + void *mod = nullptr; +}; -- 2.39.5