md_config_obs_t类
简介:
Ceph/src/common/config_obs.h
类md_config_obs_t是所有配置观察者的基类,如果你的对象要时刻响应配置的变化,就可以继承该类来定义。
通过调用md_config_t::add_observer()和md_config_t::remove_observer()可以订阅和取消订阅配置的变化。
md_config_obs_t是一个虚基类,其中定义了四个方法:
析构函数
virtual ~md_config_obs_t(){}
返回一组配置项的键列表。
virtual const char** get_tracked_conf_keys() const = 0
处理配置项的变化,即使配置项的变化生效。
virtual void handle_conf_change(const struct md_config *conf, const std::set < std::string >&changed)=0
该函数暂时没有被使用。
virtual void handle_subsys_change(const struct md_config_t *conf, const std::set< int>& changed) {}
荔枝:
类CephContextObs是md_config_obs_t的一个派生类。
CephContextObs:
该类中指定被跟踪的配置key只有一个:
enable_experimental_unrecoverable_data_corrupting_features
默认值为空。
const char** get_tracked_conf_keys() const {
static const char *KEYS[] = {
"enable_experimental_unrecoverable_data_corrupting_features",
NULL
};
return KEYS;
}
该函数会把
enable_experimental_unrecoverable_data_corrupting_features
的value保存到cephcontext中的_experimental_features集合中。
void handle_conf_change(const md_config_t *conf,
const std::set <std::string> &changed) {
ceph_spin_lock(&cct->_feature_lock);
get_str_set(conf->enable_experimental_unrecoverable_data_corrupting_features,
cct->_experimental_features);
ceph_spin_unlock(&cct->_feature_lock);
if (!cct->_experimental_features.empty())
lderr(cct) << "WARNING: the following dangerous and experimental features are enabled: "
<< cct->_experimental_features << dendl;
}