ceph

ceph配置源码分析

2021-10-19  本文已影响0人  小跑001

1 介绍

    ceph里面的配置文件代码比较繁琐,分析清楚配置代码对未来排查问题大有益处。

2 启动分析

2.1 入口

    无论是osd、mgr还是mon等程序都需要加载配置,都有统一的入口,例如ceph-osd.cc在main函数中调用global_init--->global_pre_init函数进行配置的加载。

2.2 env_to_vec分析

    split_dashdash把args根据"--"拆分成两段(注意:--不同于--param),前段为类型为vector的options, 后段为类型为vector的arguments。
    get_str_vec。把环境变量值取出来:默认的环境变量是"CEPH_ARGS",可以通过参数来指定名字。以空格“ ” 为间隔,把环境变量拆分为一个个字符串到g_str_vec中。
    g_str_vec腾挪到env 的vector<const char*>中,同args一样以“--”进行拆分。
    分别聚合env和args的options和arguments到args中, 还是以“--”来间隔,无论是options还是arguments,env的参数都在前。

2.3 ceph_argparse_early_args

    解析options来获取对应的值:
         a) -v 展示version
         b) -c 配置文件
         c) --cluster cluster
         d) -i 非client实体的id (client程序通过-i指定id会无效
         e) --id / --user 设置实体的id,会覆盖-i的选项
         f) --name/-n 通过名字来解析设置实体的id, 会覆盖-i 以及 --id/--user
         g)--show_args 显示参数 ,但是不会exit

3 配置类分析

3.1 ConfigProxy

    配置的代理类,实际是封装了:
         a) ConfigValues values;
         b) ObserverMgr<md_config_obs_t> obs_mgr;
         c) md_config_t config;

3.2 md_config_t

    主要包含了配置的元数据, 主要成员有:
         1) std::map<std::string, const Option&> schema;

        a) 构造函数中通过全局变量ceph_options=build_options()构造,在这个函数里面可以看到很多默认的值

         2) std::map<std::string, member_ptr_t> legacy_values;

3.3 Option

主要成员:

  1. name:

  2. type :参考 type_t {TYPE_UINT, TYPE_INT...}

  3. level: 参考level_t {basic, advanced, dev}

    3.1 basic: for users, configures some externally visible functional aspect

    3.2 advanced: for users, configures some internal behaviour

    3.3 Dev: not for users. May be dangerous, may not be documented.

    1. value_t value; value_t daemon_value;

3.4 ConfigValues

主要成员:

using values_t = std::map<std::string, map<int32_t,Option::value_t>>; // <name, <level, value_t>
values_t values;

3.5 类关系

通过ConfigProxy提供对外的接口:

1、如果是set类接口:先通过md_config_t获取option,通过option获取name、类型、默认值、校验等信息,解析value,最后设置到ConfigValues中。

2、如果是get类接口:

    2.1、流程也是从md_config_t到ConfigValues, 如果从ConfigValues不能获取到,则获取Option的默认值

    2.2、md_config_t::expand_meta 解析${var}到实际的值
上一篇 下一篇

猜你喜欢

热点阅读