... with get_tracked_keys().
Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
TracepointProvider::TracepointProvider(CephContext *cct, const char *library,
const char *config_key)
- : m_cct(cct), m_library(library), m_config_keys{config_key, NULL}
+ : m_cct(cct), m_library(library), m_config_key{config_key}
{
m_cct->_conf.add_observer(this);
verify_config(m_cct->_conf);
void TracepointProvider::handle_conf_change(
const ConfigProxy& conf, const std::set<std::string> &changed) {
- if (changed.count(m_config_keys[0])) {
+ if (changed.count(m_config_key)) {
verify_config(conf);
}
}
char buf[10];
char *pbuf = buf;
- if (conf.get_val(m_config_keys[0], &pbuf, sizeof(buf)) != 0 ||
+ if (conf.get_val(m_config_key, &pbuf, sizeof(buf)) != 0 ||
strncmp(buf, "true", 5) != 0) {
return;
}
}
protected:
- const char** get_tracked_conf_keys() const override {
- return m_config_keys;
+ std::vector<std::string> get_tracked_keys() const noexcept override {
+ return std::vector<std::string>{m_config_key};
}
void handle_conf_change(const ConfigProxy& conf,
const std::set <std::string> &changed) override;
private:
CephContext *m_cct;
std::string m_library;
- mutable const char* m_config_keys[2];
+ std::string m_config_key;
ceph::mutex m_lock = ceph::make_mutex("TracepointProvider::m_lock");
void* m_handle = nullptr;
{
if (option) {
_thread_num_option = option;
- // set up conf_keys
- _conf_keys = new const char*[2];
- _conf_keys[0] = _thread_num_option.c_str();
- _conf_keys[1] = NULL;
- } else {
- _conf_keys = new const char*[1];
- _conf_keys[0] = NULL;
}
}
ThreadPool::~ThreadPool()
{
ceph_assert(_threads.empty());
- delete[] _conf_keys;
}
void ThreadPool::handle_conf_change(const ConfigProxy& conf,
// track thread pool size changes
unsigned _num_threads;
std::string _thread_num_option;
- const char **_conf_keys;
- const char **get_tracked_conf_keys() const override {
- return _conf_keys;
+ std::vector<std::string> get_tracked_keys() const noexcept override {
+ if (_thread_num_option.empty()) {
+ return {};
+ } else {
+ return {_thread_num_option};
+ }
}
+
void handle_conf_change(const ConfigProxy& conf,
const std::set <std::string> &changed) override;
public:
explicit CephContextObs(CephContext *cct) : cct(cct) {}
- const char** get_tracked_conf_keys() const override {
- static const char *KEYS[] = {
- "enable_experimental_unrecoverable_data_corrupting_features",
- "crush_location",
- "container_image", // just so we don't hear complaints about it!
- NULL
+ std::vector<std::string> get_tracked_keys() const noexcept override {
+ return {
+ "enable_experimental_unrecoverable_data_corrupting_features"s,
+ "crush_location"s,
+ "container_image"s // just so we don't hear complaints about it!
};
- return KEYS;
}
void handle_conf_change(const ConfigProxy& conf,
#ifndef WITH_SEASTAR
// observe this change
struct Observer : public md_config_obs_t {
- const char *keys[2];
- explicit Observer(const char *c) {
- keys[0] = c;
- keys[1] = NULL;
- }
+ const std::string key;
+ explicit Observer(const char *c) : key(c) {}
- const char** get_tracked_conf_keys() const override {
- return (const char **)keys;
+ std::vector<std::string> get_tracked_keys() const noexcept override {
+ return std::vector<std::string>{key};
}
void handle_conf_change(const ConfigProxy& conf,
const std::set <std::string> &changed) override {
using namespace ceph::osd::scheduler;
using TOPNSPC::common::cmd_getval;
using TOPNSPC::common::cmd_getval_or;
+using namespace std::literals;
static ostream& _prefix(std::ostream* _dout, int whoami, epoch_t epoch) {
return *_dout << "osd." << whoami << " " << epoch << " ";
// --------------------------------
-const char** OSD::get_tracked_conf_keys() const
-{
- static const char* KEYS[] = {
- "osd_max_backfills",
- "osd_min_recovery_priority",
- "osd_max_trimming_pgs",
- "osd_op_complaint_time",
- "osd_op_log_threshold",
- "osd_op_history_size",
- "osd_op_history_duration",
- "osd_op_history_slow_op_size",
- "osd_op_history_slow_op_threshold",
- "osd_enable_op_tracker",
- "osd_map_cache_size",
- "osd_pg_epoch_max_lag_factor",
- "osd_pg_epoch_persisted_max_stale",
- "osd_recovery_sleep",
- "osd_recovery_sleep_hdd",
- "osd_recovery_sleep_ssd",
- "osd_recovery_sleep_hybrid",
- "osd_delete_sleep",
- "osd_delete_sleep_hdd",
- "osd_delete_sleep_ssd",
- "osd_delete_sleep_hybrid",
- "osd_snap_trim_sleep",
- "osd_snap_trim_sleep_hdd",
- "osd_snap_trim_sleep_ssd",
- "osd_snap_trim_sleep_hybrid",
- "osd_scrub_sleep",
- "osd_recovery_max_active",
- "osd_recovery_max_active_hdd",
- "osd_recovery_max_active_ssd",
+std::vector<std::string> OSD::get_tracked_keys() const noexcept
+{
+ return {
+ "osd_max_backfills"s,
+ "osd_min_recovery_priority"s,
+ "osd_max_trimming_pgs"s,
+ "osd_op_complaint_time"s,
+ "osd_op_log_threshold"s,
+ "osd_op_history_size"s,
+ "osd_op_history_duration"s,
+ "osd_op_history_slow_op_size"s,
+ "osd_op_history_slow_op_threshold"s,
+ "osd_enable_op_tracker"s,
+ "osd_map_cache_size"s,
+ "osd_pg_epoch_max_lag_factor"s,
+ "osd_pg_epoch_persisted_max_stale"s,
+ "osd_recovery_sleep"s,
+ "osd_recovery_sleep_hdd"s,
+ "osd_recovery_sleep_ssd"s,
+ "osd_recovery_sleep_hybrid"s,
+ "osd_delete_sleep"s,
+ "osd_delete_sleep_hdd"s,
+ "osd_delete_sleep_ssd"s,
+ "osd_delete_sleep_hybrid"s,
+ "osd_snap_trim_sleep"s,
+ "osd_snap_trim_sleep_hdd"s,
+ "osd_snap_trim_sleep_ssd"s,
+ "osd_snap_trim_sleep_hybrid"s,
+ "osd_scrub_sleep"s,
+ "osd_recovery_max_active"s,
+ "osd_recovery_max_active_hdd"s,
+ "osd_recovery_max_active_ssd"s,
// clog & admin clog
- "clog_to_monitors",
- "clog_to_syslog",
- "clog_to_syslog_facility",
- "clog_to_syslog_level",
- "osd_objectstore_fuse",
- "clog_to_graylog",
- "clog_to_graylog_host",
- "clog_to_graylog_port",
- "host",
- "fsid",
- "osd_recovery_delay_start",
- "osd_client_message_size_cap",
- "osd_client_message_cap",
- "osd_heartbeat_min_size",
- "osd_heartbeat_interval",
- "osd_object_clean_region_max_num_intervals",
- "osd_scrub_min_interval",
- "osd_scrub_max_interval",
- "osd_op_thread_timeout",
- "osd_op_thread_suicide_timeout",
- "osd_max_scrubs",
- nullptr
+ "clog_to_monitors"s,
+ "clog_to_syslog"s,
+ "clog_to_syslog_facility"s,
+ "clog_to_syslog_level"s,
+ "osd_objectstore_fuse"s,
+ "clog_to_graylog"s,
+ "clog_to_graylog_host"s,
+ "clog_to_graylog_port"s,
+ "host"s,
+ "fsid"s,
+ "osd_recovery_delay_start"s,
+ "osd_client_message_size_cap"s,
+ "osd_client_message_cap"s,
+ "osd_heartbeat_min_size"s,
+ "osd_heartbeat_interval"s,
+ "osd_object_clean_region_max_num_intervals"s,
+ "osd_scrub_min_interval"s,
+ "osd_scrub_max_interval"s,
+ "osd_op_thread_timeout"s,
+ "osd_op_thread_suicide_timeout"s,
+ "osd_max_scrubs"s
};
- return KEYS;
}
void OSD::handle_conf_change(const ConfigProxy& conf,
public:
// config observer bits
- const char** get_tracked_conf_keys() const override;
+ std::vector<std::string> get_tracked_keys() const noexcept override;
void handle_conf_change(const ConfigProxy& conf,
const std::set <std::string> &changed) override;
void update_log_config();
namespace dmc = crimson::dmclock;
using namespace std::placeholders;
+using namespace std::literals;
#define dout_context cct
#define dout_subsys ceph_subsys_mclock
return out.str();
}
-const char** mClockScheduler::get_tracked_conf_keys() const
+std::vector<std::string> mClockScheduler::get_tracked_keys() const noexcept
{
- static const char* KEYS[] = {
- "osd_mclock_scheduler_client_res",
- "osd_mclock_scheduler_client_wgt",
- "osd_mclock_scheduler_client_lim",
- "osd_mclock_scheduler_background_recovery_res",
- "osd_mclock_scheduler_background_recovery_wgt",
- "osd_mclock_scheduler_background_recovery_lim",
- "osd_mclock_scheduler_background_best_effort_res",
- "osd_mclock_scheduler_background_best_effort_wgt",
- "osd_mclock_scheduler_background_best_effort_lim",
- "osd_mclock_max_capacity_iops_hdd",
- "osd_mclock_max_capacity_iops_ssd",
- "osd_mclock_max_sequential_bandwidth_hdd",
- "osd_mclock_max_sequential_bandwidth_ssd",
- "osd_mclock_profile",
- NULL
+ return {
+ "osd_mclock_scheduler_client_res"s,
+ "osd_mclock_scheduler_client_wgt"s,
+ "osd_mclock_scheduler_client_lim"s,
+ "osd_mclock_scheduler_background_recovery_res"s,
+ "osd_mclock_scheduler_background_recovery_wgt"s,
+ "osd_mclock_scheduler_background_recovery_lim"s,
+ "osd_mclock_scheduler_background_best_effort_res"s,
+ "osd_mclock_scheduler_background_best_effort_wgt"s,
+ "osd_mclock_scheduler_background_best_effort_lim"s,
+ "osd_mclock_max_capacity_iops_hdd"s,
+ "osd_mclock_max_capacity_iops_ssd"s,
+ "osd_mclock_max_sequential_bandwidth_hdd"s,
+ "osd_mclock_max_sequential_bandwidth_ssd"s,
+ "osd_mclock_profile"s
};
- return KEYS;
}
void mClockScheduler::handle_conf_change(
return op_queue_type_t::mClockScheduler;
}
- const char** get_tracked_conf_keys() const final;
+ std::vector<std::string> get_tracked_keys() const noexcept final;
void handle_conf_change(const ConfigProxy& conf,
const std::set<std::string> &changed) final;
using ceph::shunique_lock;
using ceph::acquire_shared;
using ceph::acquire_unique;
+using namespace std::literals;
namespace bc = boost::container;
namespace bs = boost::system;
return {completion_locks[h % num_locks], std::defer_lock};
}
-const char** Objecter::get_tracked_conf_keys() const
+std::vector<std::string> Objecter::get_tracked_keys() const noexcept
{
- static const char *config_keys[] = {
- "crush_location",
- "rados_mon_op_timeout",
- "rados_osd_op_timeout",
- NULL
+ return {
+ "crush_location"s,
+ "rados_mon_op_timeout"s,
+ "rados_osd_op_timeout"s
};
- return config_keys;
}
using OpCompletion = boost::asio::any_completion_handler<OpSignature>;
// config observer bits
- const char** get_tracked_conf_keys() const override;
+ std::vector<std::string> get_tracked_keys() const noexcept override;
void handle_conf_change(const ConfigProxy& conf,
const std::set <std::string> &changed) override;