【ETCD】【源码阅读】Etcd启动阶段配置解析跟踪

一、newConfig()

newConfig() 是 ETCD 启动过程中的一个重要函数,它用于初始化和配置 ETCD 的各种配置项。该函数构造了一个 config 类型的实例,并为其配置了多个启动参数、标志和默认值。接下来,我们将逐行解析该函数的具体实现。


1. 创建 config 实例

cfg := &config{
   
    ec:      *embed.NewConfig(),
    ignored: ignored,
}
  • cfg := &config{...}:创建一个新的 config 结构体实例,并为其各个字段赋予默认值。
  • ec: *embed.NewConfig():初始化 embed.Config,这是 ETCD 服务的配置,包含了网络监听、存储路径等基础配置。
  • ignored: ignoredignored 是一个包含需要忽略的标志名称的字符串切片。它用于存储那些不会被解析和使用的标志。

2. 初始化 configFlags 结构体

cfg.cf = configFlags{
   
    flagSet: flag.NewFlagSet("etcd", flag.ContinueOnError),
    clusterState: flags.NewSelectiveStringValue(
        embed.ClusterStateFlagNew,
        embed.ClusterStateFlagExisting,
    ),
    fallback: flags.NewSelectiveStringValue(
        fallbackFlagExit,
        fallbackFlagProxy,
    ),
    v2deprecation: flags.NewSelectiveStringsValue(
        string(cconfig.V2Depr1WriteOnly),
        string(cconfig.V2Depr1WriteOnlyDrop),
        string(cconfig.V2Depr2Gone)),
}
  • flagSet: flag.NewFlagSet("etcd", flag.ContinueOnError):创建一个新的 FlagSet 实例,该实例用于解析命令行参数。"etcd" 是标志集的名称,flag.ContinueOnError 表示在遇到错误时继续执行(不退出)。

  • clusterState: flags.NewSelectiveStringValue(...)clusterState 是一个标志,表示集群的状态。它使用 NewSelectiveStringValue 初始化,支持选择值 "new"(新集群)或 "existing"(已有集群)。这个标志告诉 ETCD 是启动一个新集群还是加入现有集群。

  • fallback: flags.NewSelectiveStringValue(...)fallback 是一个标志,控制发现失败时的处理方式。它的可选值为 "exit""proxy",决定在发现失败时退出或继续作为代理。

  • v2deprecation: flags.NewSelectiveStringsValue(...)v2deprecation 是一个包含多个选择值的标志,用于控制 ETCD v2 API 的弃用阶段。它使用 NewSelectiveStringsValue 初始化,支持不同的弃用阶段(如 "write-only""write-only-drop""gone")。


3. 定义 Usage 函数

fs := cfg.cf.flagSet
fs.Usage = func() {
   
    fmt.Fprintln(os.Stderr, usageline)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值