X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fcommon%2FTracepointProvider.h;fp=src%2Fceph%2Fsrc%2Fcommon%2FTracepointProvider.h;h=97d3a0f763723fa0e906fd8ed1e4025b8613ea25;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/common/TracepointProvider.h b/src/ceph/src/common/TracepointProvider.h new file mode 100644 index 0000000..97d3a0f --- /dev/null +++ b/src/ceph/src/common/TracepointProvider.h @@ -0,0 +1,78 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#ifndef CEPH_TRACEPOINT_PROVIDER_H +#define CEPH_TRACEPOINT_PROVIDER_H + +#include "common/config_obs.h" +#include "common/Mutex.h" +#include + +struct md_config_t; + +class TracepointProvider : public md_config_obs_t, boost::noncopyable { +public: + struct Traits { + const char *library; + const char *config_key; + + Traits(const char *library, const char *config_key) + : library(library), config_key(config_key) { + } + }; + + class Singleton { + public: + Singleton(CephContext *cct, const char *library, const char *config_key) + : tracepoint_provider(new TracepointProvider(cct, library, config_key)) { + } + ~Singleton() { + delete tracepoint_provider; + } + + inline bool is_enabled() const { + return tracepoint_provider->m_handle != nullptr; + } + private: + TracepointProvider *tracepoint_provider; + }; + + template + class TypedSingleton : public Singleton { + public: + explicit TypedSingleton(CephContext *cct) + : Singleton(cct, traits.library, traits.config_key) { + } + }; + + TracepointProvider(CephContext *cct, const char *library, + const char *config_key); + ~TracepointProvider() override; + + template + static void initialize(CephContext *cct) { +#ifdef WITH_LTTNG + TypedSingleton *singleton; + cct->lookup_or_create_singleton_object(singleton, traits.library); +#endif + } + +protected: + const char** get_tracked_conf_keys() const override { + return m_config_keys; + } + void handle_conf_change(const struct md_config_t *conf, + const std::set &changed) override; + +private: + CephContext *m_cct; + std::string m_library; + mutable const char* m_config_keys[2]; + + Mutex m_lock; + void* m_handle = nullptr; + + void verify_config(const struct md_config_t *conf); +}; + +#endif // CEPH_TRACEPOINT_PROVIDER_H