【ETCD】【源码阅读】深入解析 EtcdServer.applyConfChange 方法

applyConfChange 方法是处理 ConfChange 配置变更的核心逻辑。它被用来将通过 Raft 已经提交的配置变更应用到 EtcdServer。配置变更通常包括添加、删除、更新节点等操作。这个方法涉及到多个关键操作,包括配置验证、成员管理、以及 Raft 集群的更新等。

一、方法完整源码

二、方法详细解析

1. 初始化日志记录
lg := s.Logger()
  • 功能:初始化日志记录器,用于后续记录操作日志。
  • 作用:帮助开发者追踪配置变更的处理过程。
2. 配置变更验证
if err := s.cluster.ValidateConfigurationChange(cc); err != nil {
   
    lg.Error("Validation on configuration change failed", zap.Bool("shouldApplyV3", bool(shouldApplyV3)), zap.Error(err))
    cc.NodeID = raft.None
    s.r.ApplyConfChange(cc)

    if s.consistIndex != nil && membership.ApplyBoth == shouldApplyV3 {
   
        applyingIndex, applyingTerm := s.consistIndex.ConsistentApplyingIndex()
        s.consistIndex.SetConsistentIndex(applyingIndex, applyingTerm)
    }
    return false, err
}
  • 功能:对配置变更进行验证,确保配置合法。
  • 作用
    • 如果验证失败,记录错误日志,并将配置变更标记为无效(cc.NodeID = raft.None)。
    • 调用 s.r.ApplyConfChange(cc) 将配置变更应用到 Raft 存储中。
    • 如果需要应用 V3 存储,还会更新一致性索引。
    • 返回 false 和错误,表示配置变更未成功应用。
3. 更新配置状态
*confState = *s.r.ApplyConfChange(cc)
s.beHooks.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值