From: Kefu Chai Date: Tue, 3 Aug 2021 10:30:34 +0000 (+0800) Subject: tools/ceph-dencoder: extract denc_plugin.h out X-Git-Tag: v16.2.11~358^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=33c110fadc64f16589c066595df78b08da5381ff;p=ceph.git 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 (cherry picked from commit 957b1c247c25713297c5d72964f553a8014f81ef) --- diff --git a/src/tools/ceph-dencoder/ceph_dencoder.cc b/src/tools/ceph-dencoder/ceph_dencoder.cc index d313576e39a6..b4974eaea5fd 100644 --- a/src/tools/ceph-dencoder/ceph_dencoder.cc +++ b/src/tools/ceph-dencoder/ceph_dencoder.cc @@ -13,7 +13,6 @@ */ -#include #include #if __has_include() @@ -29,6 +28,7 @@ namespace fs = std::experimental::filesystem; #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) @@ -63,44 +63,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}; @@ -123,6 +85,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 000000000000..1a0834ec766a --- /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; +};