当前位置: 首页 > news >正文

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

applyEntries方法的主要作用是接收待应用的 Raft 日志条目,并按顺序将其应用到系统中;确保条目的索引连续,避免丢失或重复应用条目。

一、函数完整代码

func (s *EtcdServer) applyEntries(ep *etcdProgress, apply *apply) {if len(apply.entries) == 0 {return}firsti := apply.entries[0].Indexif firsti > ep.appliedi+1 {lg := s.Logger()lg.Panic("unexpected committed entry index",zap.Uint64("current-applied-index", ep.appliedi),zap.Uint64("first-committed-entry-index", firsti),)}var ents []raftpb.Entryif ep.appliedi+1-firsti < uint64(len(apply.entries)) {ents = apply.entries[ep.appliedi+1-firsti:]}if len(ents) == 0 {return}var shouldstop boolif ep.appliedt, ep.appliedi, shouldstop = s.apply(ents, &ep.confState); shouldstop {go s.stopWithDelay(10*100*time.Millisecond, fmt.Errorf("the member has been permanently removed from the cluster"))}
}

二、方法完整解析

1. 检查是否有待应用的条目

if len(apply.entries) == 0 {return
}
  • 功能:检查是否有待应用的条目。
  • 作用:如果 apply.entries 为空,说明没有新条目需要应用,函数直接返回,不做任何处理。

2. 验证条目的索引是否连续

firsti := apply.entries[0].Index
if firsti > ep.appliedi+1 {lg := s.Logger()lg.Panic("unexpected committed entry index",zap.Uint64("current-applied-index", ep.appliedi),zap.Uint64("first-committed-entry-index", firsti),)
}
  • 功能:验证待应用条目的索引是否连续。
  • 作用:如果待应用的第一个条目索引大于当前已应用索引 + 1,表示条目丢失或索引跳跃,触发 panic,并记录错误日志。

3. 选择待应用的条目

var ents []raftpb.Entry
if ep.appliedi+1-firsti < uint64(len(apply.entries)) {ents = apply.entries[ep.appliedi+1-firsti:]
}
  • 功能:选择从当前已应用索引之后需要应用的条目。
  • 作用:确保条目按照顺序应用,避免跳过任何条目。ents 保存了从当前应用位置开始的所有待应用条目。

4. 检查是否有待应用的条目

if len(ents) == 0 {return
}
  • 功能:检查是否有待应用的条目。
  • 作用:如果没有待应用的条目(即所有条目都已经应用),直接返回,不继续执行后续操作。

5. 应用条目并判断是否需要停止该成员

var shouldstop bool
if ep.appliedt, ep.appliedi, shouldstop = s.apply(ents, &ep.confState); shouldstop {go s.stopWithDelay(10*100*time.Millisecond, fmt.Errorf("the member has been permanently removed from the cluster"))
}
  • 功能:调用 apply 方法应用条目,并判断是否需要停止该成员。
  • 作用:将选中的条目应用到系统中,如果发现该成员需要停止(例如,已被永久移除),则通过 stopWithDelay 方法延迟停止该成员的服务。

三、方法总结:

  • 该方法的主要作用是接收待应用的 Raft 日志条目,并按顺序将其应用到系统中。
  • 它会确保条目的索引连续,避免丢失或重复应用条目。
  • 如果发现该成员应该被移除(如它被永久移除或存在某些异常情况),函数会触发停止操作。
    下一步的阅读的主要方法为
    func (s *EtcdServer) apply方法

相关文章:

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

applyEntries方法的主要作用是接收待应用的 Raft 日志条目&#xff0c;并按顺序将其应用到系统中&#xff1b;确保条目的索引连续&#xff0c;避免丢失或重复应用条目。 一、函数完整代码 func (s *EtcdServer) applyEntries(ep *etcdProgress, apply *apply) {if len(apply.…...

概率论得学习和整理28:用EXCEL画折线图,X轴数据也被当成曲线的解决办法

目录 1 折线图和散点图&#xff0c;对数据的处理差别 1.1 EXCEL画图的一些默认设置 1.2 多于2列的数据&#xff0c;也是如此 2 如果我们非要以第1列数据为X轴&#xff0c;做一个折线图呢&#xff1f;也能 2.1 首先&#xff0c;把第1列&#xff0c;想当成X轴的数据&#xf…...

tryhackme-Pre Security-Defensive Security Intro(防御安全简介)

任务一&#xff1a;Introduction to Defensive Security防御安全简介 此room的两个要点&#xff1a; Preventing intrusions from occurring 防止入侵发生Detecting intrusions when they occur and responding properly 检测发生的入侵并正确响应 防御安全还有更多内容。 除上…...

27. 元类

一、什么是元类 在 Python 中&#xff0c;一切皆为对象&#xff0c;即类也是一个对象。type 是内置的元类。我们用 class 关键字定义的所有的类以及内置的类都是由元类 type&#xff08;内置的元类&#xff09; 实例化产生的。 class Person:def __init__(self, name, age):se…...

PHP木马编写

一、最简单的一句话木马 <?php eval($_REQUEST[cmd]); ?> 1. <?php 和 ?> <?php 和 ?> 是 PHP 代码的开始和结束标记&#xff0c;表示 PHP 代码块的范围。 2. eval() eval() 是 PHP 中的一个内建函数&#xff0c;用来执行字符串类型的 PHP 代码。…...

游戏AI实现-寻路算法(Dijkstra)

戴克斯特拉算法&#xff08;英语&#xff1a;Dijkstras algorithm&#xff09;&#xff0c;又称迪杰斯特拉算法、Dijkstra算法&#xff0c;是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程&#xff1a; 1.首先设置开始节点的成本值为0&#xff0c;并将…...

Android OpenGLES2.0开发(九):图片滤镜

“当你改变想法的时候&#xff0c;记得也要改变你的世界。”——诺曼文森特皮尔 Android OpenGLES开发&#xff1a;EGL环境搭建Android OpenGLES2.0开发&#xff08;一&#xff09;&#xff1a;艰难的开始Android OpenGLES2.0开发&#xff08;二&#xff09;&#xff1a;环境搭…...

SQLite Update 语句

SQLite Update 语句 SQLite 的 UPDATE 语句用于更新数据库表中的现有记录。使用 UPDATE 语句&#xff0c;您可以修改一个或多个列的值。本教程将详细介绍如何使用 SQLite UPDATE 语句&#xff0c;包括语法、示例以及一些最佳实践。 语法 SQLite UPDATE 语句的基本语法如下&a…...

Metaploit-永恒之蓝漏洞利用

1&#xff1a;Metaploit介绍   本次测试主要是利用永恒之蓝漏洞对windows7进行控制利用&#xff0c;掌握Metaploit工具的使用&#xff0c;知道永恒之蓝的漏洞利用原理。永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞&#xff0c;这个漏洞导致攻击者在目标系统上可…...

机器学习预处理-表格数据的空值处理

机器学习预处理-表格数据的空值处理 机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化&#xff0c;可视化能够帮助我们了解数据的构成和分布&#xff0c;是我们进行机器学习的必备步骤。上文中也提及&#xff0c;原始的数据存在部分的缺失&#xff0…...

数据结构_平衡二叉树

结点类 构造函数分为有参和无参&#xff0c;相同点都是初始化树高为1 class Node { public:int data; // 用于输出int val; // 数据域&#xff0c;用于排序int height; // 树高Node* left;Node* right;Node();Node(int v, int d);static int max(int a, int b); };Node::N…...

C++对象的赋值与复制复制构造函数(指针数据成员)

一、对象的赋值 同类对象之间可以相互赋值&#xff0c;对象赋值的一般形式&#xff1a;对象名2 对象名1; 原理是&#xff0c;赋值运算符的重载。仅赋值&#xff0c;因此赋值前&#xff0c;需要先定义并初始化对象2。 对象的赋值针对指对象中所有数据成员的值&#xff1b; 对…...

Coding Caprice - monotonic stack2

42. 接雨水 class Solution { public:int trap(vector<int>& height) {stack<int> sh;int out 0;for(int i0; i<height.size(); i){while(!sh.empty() && height[sh.top()]<height[i]){int bo height[sh.top()];sh.pop();if(sh.empty()){brea…...

Spring Mvc面试题(常见)

1 Spring MVC的执行流程 用户发起请求,请求先被Servlet拦截以后,转发给SpringMVC框架SpringMVC 里面的DispatcherServlet(核心控制器) 接收到请求,并转发给HandlerMappingHandlerMapping负责解析请求,根据请求信息和配置信息找到匹配的Controller类(当这里有配置拦截器,会…...

opencv # Sobel算子、Laplacian算子、Canny边缘检测、findContours、drawContours绘制轮廓、外接矩形

一、Sobel算子 案例图片 cv2.Sobel(src, ddepth, dx, dy, ksize3, scale1, delta0, borderTypeNone) 功能&#xff1a;用于计算图像梯度&#xff08;gradient&#xff09;的函数 参数&#xff1a; src: 输入图像&#xff0c;它应该是灰度图像。 ddepth: 输出图像的所需深度&am…...

Neo4j插入数据逐级提升速度4倍又4倍

语雀版&#xff1a;https://www.yuque.com/xw76/back/dtukgqfkfwg1d6yo 目录 背景介绍初始方案Node()创建事务批量提交记录Node是否存在生成Cypher语句执行数据库参数优化切换成85k个三元组测试建索引&#xff08;很显著&#xff01;&#xff01;&#xff01;&#xff09;MATCH…...

C++特殊类设计(单例模式等)

目录 引言 1.请设计一个类&#xff0c;不能被拷贝 2. 请设计一个类&#xff0c;只能在堆上创建对象 为什么设置实例的方法为静态成员呢 3. 请设计一个类&#xff0c;只能在栈上创建对象 4. 请设计一个类&#xff0c;不能被继承 5. 请设计一个类&#xff0c;只能创建一个对…...

J8学习打卡笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 Inception v1算法实战与解析 导入数据数据预处理划分数据集搭建模型训练模型正式训练结果可视化详细网络结构图个人总结 import os, PIL, random, pathlib imp…...

前端学习-操作元素内容(二十二)

目录 前言 目标 对象.innerText 属性 对象.innerHTML属性 案例 年会抽奖 需求 方法一 方法二 总结 前言 曾经沧海难为水&#xff0c;除却巫山不是云。 目标 能够修改元素的文本更换内容 DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象&#xff0c;…...

【踩坑】pip离线+在线在虚拟环境中安装指定版本cudnn攻略

pip离线在线在虚拟环境中安装指定版本cudnn攻略 在线安装离线安装Windows环境&#xff1a;Linux环境&#xff1a; 清华源官方帮助文档 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 标题的离线的意思是先下载whl文件再安装到虚拟环境&#xff0c;在线的意思是直接在当前虚…...

别只盯着PID!用STM32的PWM差速控制,让你的循迹小车转弯更稳(附源码分析)

STM32 PWM差速控制&#xff1a;让循迹小车转弯更稳的实战技巧 循迹小车的核心挑战之一是如何实现平滑稳定的转弯控制。许多开发者习惯性地直接套用PID算法&#xff0c;却忽略了更基础的PWM差速控制策略。实际上&#xff0c;通过精心设计的PWM占空比调整方案&#xff0c;完全可以…...

SEO 实战培训班在哪里_SEO 优化师培训在哪里

SEO 实战培训班在哪里_SEO 优化师培训在哪里 在当今数字化时代&#xff0c;网站的流量和排名直接关系到企业的生存和发展。这就是为什么越来来越多的企业和个人希望掌握SEO优化技能&#xff0c;成为一名优秀的SEO优化师。SEO 实战培训班在哪里呢&#xff1f;SEO 优化师培训在哪…...

AI Agent 系统设计方法导论

从"调用模型"到"系统工程"在当前 AI 领域&#xff0c;单纯的 Prompt Engineering 已无法满足日益复杂的业务逻辑。作为后端 AI 工程师&#xff0c;我们必须建立一个核心共识&#xff1a;"模型能力的上限决定了产品的下限&#xff0c;而架构设计的优劣…...

ReactNative项目OpenHarmony三方库集成实战:react-native-render-html

欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net 项目基于 RN 0.72.90 开发 &#x1f4cb; 前言 在移动应用开发中&#xff0c;HTML 内容渲染是一项常见需求&#xff0c;特别是在新闻资讯、富文本编辑、邮件展示等场景中。React Native 原…...

当AI真正“看懂“你的屏幕:GPT-5.4如何重新定义人机协作的边界

摘要&#xff1a; 2026年3月&#xff0c;OpenAI发布了GPT-5.4。这不是一次普通的模型迭代&#xff0c;而是一次能力边界的重新定义——它首次实现了原生的"计算机使用"能力&#xff0c;能在桌面上像人类一样点击按钮、填写表单、操作软件&#xff1b;它拥有五级可调的…...

最新短网址系统源码 短网址源码 分用户链接 全新UI短网址源码

最新短网址系统源码 分用户链接 简单介绍一下这个短链接源码&#xff0c;这个是我根据自己需要自建的&#xff0c;偏向于个人需求的完成 说一下特点吧&#xff0c;短链接格式如同https://域名/0810a7/tlWl6y&#xff0c;其中0810a7区分用户&#xff0c;tlWl6y是短链接的短码 …...

2026年,正规GEO优化排名公司将如何引领行业新潮流?

在AI搜索全面普及的当下&#xff0c;GEO&#xff08;生成式引擎优化&#xff09;成为企业突破曝光瓶颈的核心赛道。到2026年&#xff0c;正规GEO优化排名公司将凭借其专业能力和创新策略&#xff0c;引领行业迈向新的发展阶段。以[上海铪铪网络科技有限公司]为例&#xff0c;我…...

低成本自动化:OpenClaw+Gemma-3-12b-it替代Zapier的5个场景

低成本自动化&#xff1a;OpenClawGemma-3-12b-it替代Zapier的5个场景 1. 为什么选择OpenClawGemma替代Zapier 作为一个长期使用Zapier的自动化爱好者&#xff0c;我最近开始尝试用OpenClawGemma-3-12b-it组合来替代部分Zapier工作流。这个转变源于两个痛点&#xff1a;一是Z…...

10分钟零成本搭建KIMI AI免费API:个人智能助手完整指南

10分钟零成本搭建KIMI AI免费API&#xff1a;个人智能助手完整指南 【免费下载链接】kimi-free-api &#x1f680; KIMI AI 长文本大模型逆向API【特长&#xff1a;长文本解读整理】&#xff0c;支持高速流式输出、智能体对话、联网搜索、探索版、K1思考模型、长文档解读、图像…...

GLM-4.1V-9B-Base多场景:教育题图解析、法律文书图示理解、科研图表解读

GLM-4.1V-9B-Base多场景应用&#xff1a;教育题图解析、法律文书图示理解、科研图表解读 1. 认识GLM-4.1V-9B-Base视觉理解模型 GLM-4.1V-9B-Base是智谱开源的一款强大的视觉多模态理解模型&#xff0c;专门设计用于处理图像内容识别和理解任务。与传统的纯文本模型不同&…...