Neon walproposer进程状态机
WAL Proposer 完整状态机全局状态wp-stateWalProposerStateWPS_COLLECTING_TERMS → WPS_CAMPAIGN → WPS_ELECTED 收集握手/term 投票中 已当选开始流复制每个 Safekeeper 状态sk-stateSafekeeperState┌──────────────────────────────────────────┐ │ 任何状态出错 → ShutdownConnection │ │ ↓ SS_OFFLINE │ │ ReconnectSafekeepers (每1s) │ │ ↓ ResetConnection │ └──────────────────────────────────────────┘ SS_OFFLINE ──ResetConnection──→ SS_CONNECTING_WRITE │ │ │ conn_connect_poll() │ │ │ ┌──────────────┼──────────────┐ │ ↓ ↓ ↓ │ POLLING_WRITING POLLING_READING POLLING_OK │ SS_CONNECTING_ SS_CONNECTING_ │ │ WRITE READ │ │ │ │ │ │ └── poll() ────┘ │ │ ↓ │ SendStartWALPush() │ │ │ ↓ │ SS_WAIT_EXEC_RESULT │ │ │ conn_get_query_result() │ │ │ ↓ COPYBOTH成功 │ SendProposerGreeting() │ │ [消息: ProposerGreeting g] │ ↓ │ SS_HANDSHAKE_RECV │ │ │ AsyncReadMessage() → greetResponse │ │ │ ↓ │ SS_WAIT_VOTING (idle, 等待quorum) │ │ │ TermsCollected() → WPS_CAMPAIGN │ SendVoteRequest() │ │ [消息: VoteRequest v] │ ↓ │ SS_WAIT_VERDICT │ │ │ AsyncReadMessage() → voteResponse │ │ │ VotesCollected() → WPS_ELECTED │ HandleElectedProposer() │ │ │ ↓ │ SS_WAIT_ELECTED (idle) │ │ │ SendProposerElected() [消息: ProposerElected e] │ │ │ ↓ │ SS_SEND_ELECTED_FLUSH │ │ │ AsyncFlush() → OK │ │ │ StartStreaming() │ │ │ ↓ │ SS_ACTIVE ←── 流复制/心跳阶段 │ │ │ ┌───────────┼───────────┐ │ ↓ ↓ ↓ │ SS_ACTIVE_ SS_ACTIVE_ SS_ACTIVE_ │ SEND READ_WAL FLUSH │ │ │ │ └──── 循环 ──────────────┘ │ └── 超时/断连后回到 SS_OFFLINE重新开始消息流与处理函数对照表阶段sk→wp 消息wp→sk 消息入口函数sk-state 变化连接--ResetConnectionOFFLINE → CONNECTING_WRITETCP握手--HandleConnectionEventCONNECTING_* → (polling)START_WAL_PUSH-SQL querySendStartWALPushCONNECTING_* → WAIT_EXEC_RESULT执行结果CopyBoth响应-RecvStartWALPushResultWAIT_EXEC_RESULT → HANDSHAKE_RECV握手-gGreetingSendProposerGreetingHANDSHAKE_RECV握手响应gGreeting-RecvAcceptorGreetingHANDSHAKE_RECV → WAIT_VOTING投票开始-vVoteRequestSendVoteRequestWAIT_VOTING → WAIT_VERDICT投票响应vVoteResponse-RecvVoteResponseWAIT_VERDICT → WAIT_ELECTED宣布当选-eProposerElectedSendProposerElectedWAIT_ELECTED → SEND_ELECTED_FLUSHFlush--AsyncFlush→StartStreamingSEND_ELECTED_FLUSH →SS_ACTIVEWAL/心跳aAppendResponseaAppendRequestHandleActiveStateSS_ACTIVE 循环断连--ShutdownConnection任意 →SS_OFFLINESS_ACTIVE 子状态循环SS_ACTIVE_SEND ──SendAppendRequests()──→ SS_ACTIVE_READ_WAL ↑ │ │ wal_read() 读WAL │ │ │ conn_async_write() │ │ │ ┌───────────┼───────────┐ │ ↓ ↓ ↓ │ WRITE_SUCCESS TRY_FLUSH WRITE_FAIL │ │ │ │ │ SS_ACTIVE_SEND SS_ACTIVE ShutdownConnection │ │ _FLUSH ↓ │ │ │ SS_OFFLINE │ │ AsyncFlush() │ │ │ │ └────┬────┘ │ │ └──── 同时可接收 AppendResponse ──┘ RecvAppendResponses() → HandleSafekeeperResponse() → GetAcknowledgedByQuorumWALPosition() → commitLsn 推进 → BroadcastAppendRequest()Global 状态转换wp-stateWPS_COLLECTING_TERMS │ 每收到一个 Greeting → 检查 TermsCollected() │ 条件: n_connected quorum (≥2) │ → 设置 propTerm, voteRequest ↓ WPS_CAMPAIGN │ 每收到一个 VoteResponse → 检查 VotesCollected() │ 条件: quorum 个 safekeeper 在 SS_WAIT_ELECTED │ → HandleElectedProposer() ↓ WPS_ELECTED │ 给所有 SS_WAIT_ELECTED 发 ProposerElected │ → StartStreaming → 进入 WAL 流复制 / 心跳阶段

相关新闻

HarmonyOS @Provide/@Consume 跨组件通信

HarmonyOS @Provide/@Consume 跨组件通信

适用版本:HarmonyOS 6.1(API 12)及以上 验证环境:Pura 90 Pro 模拟器(HarmonyOS 6.1.1,API 24) 关键概念:Provide、Consume、跨层级状态共享、主题系统 前言 Prop 和 Link 适合直接…

2026/10/10 20:40:21 阅读更多 →
PHP专家成长指南:从语法到架构的进阶之路

PHP专家成长指南:从语法到架构的进阶之路

1. PHP专家的核心能力图谱十年前我刚接触PHP时,以为会写几个CRUD页面就是专家了,直到参与了一个日均百万PV的电商项目重构才明白,真正的PHP专家需要的是立体化的技术栈。这张能力图谱是我从初级到资深PHP开发者的成长路径总结:1.1…

2026/10/5 13:16:59 阅读更多 →
Anaconda环境管理:Python开发者的高效解决方案

Anaconda环境管理:Python开发者的高效解决方案

1. 为什么选择Anaconda管理Python环境在Python开发领域,环境管理一直是个令人头疼的问题。我经历过无数次"在我的机器上能运行"的尴尬场景,也遇到过不同项目依赖冲突导致的诡异bug。经过多年实践,我发现Anaconda是最适合解决这些问…

2026/10/9 6:52:37 阅读更多 →

最新新闻

删数问题与贪心算法:从错误直觉到单调栈最优解

删数问题与贪心算法:从错误直觉到单调栈最优解

上个月帮几位朋友看算法实验作业,他们在头歌平台上刷贪心算法关卡,卡得最久的不是那些需要长篇大论设计的题目,而是一道看起来非常简单的"删数问题"。代码量不到二十行,解题思路也说得头头是道,可提交上去就…

2026/10/12 7:33:21 阅读更多 →
自研测试平台开发实战:从架构设计到落地踩坑全记录

自研测试平台开发实战:从架构设计到落地踩坑全记录

1. 为什么我决定自研测试平台做测试平台开发这件事,起因其实很朴素:手工测试的产出效率到顶了,市面上的工具又各有各的别扭,团队里测试、开发、运维三拨人每天在来回拉扯。与其继续在Excel和聊天窗口里打转,不如自己动…

2026/10/12 7:33:21 阅读更多 →
C++装饰器模式实战指南:从继承替代到三种现代实现方案

C++装饰器模式实战指南:从继承替代到三种现代实现方案

装饰器模式在C里总是被低估。很多C开发者觉得这是Java系的东西,或者说“我有继承就够了”,但等到真正需要给一个类动态加功能、又不能把继承树搞成爆炸形状的时候,才会发现装饰器这东西是真能救命的。尤其是维护老代码、做游戏技能系统、写日…

2026/10/12 7:33:21 阅读更多 →
Cloudera Manager集成OpenLDAP认证实战:账号体系收口与排障指南

Cloudera Manager集成OpenLDAP认证实战:账号体系收口与排障指南

从 2018 年开始在大规模 CDH 集群上做运维,我最大的痛苦来源不是 HDFS NameNode 的 Full GC,也不是 Yarn 资源池调参,而是账号体系乱成一锅粥。开发提工单要开 CM 账号,临时同事走了账号还在,安全审计一问三不知&#…

2026/10/12 7:33:21 阅读更多 →
WSL2+Docker+Ollama,本地部署大模型实践(Qwen1.8b)

WSL2+Docker+Ollama,本地部署大模型实践(Qwen1.8b)

本篇文章主要讲解部署思路和实践经验,先解释一下WSL2、Docker、Ollama。 WSL2:可以通俗理解成轻量化虚拟机,但和传统 VMware/VirtualBox 虚拟机不一样。它是 Windows 内置的轻量 Linux 内核,不用单独装完整的 Linux 虚拟机&#…

2026/10/12 7:33:21 阅读更多 →
天津图文广告店实测:社区老店、快印店、印刷厂怎么选?

天津图文广告店实测:社区老店、快印店、印刷厂怎么选?

开头我不绕弯子:天津图文广告店哪家强?这个问题在网上搜一圈,答案基本集中在“离家近的那家”和“价格最便宜的那家”,但真到了要做标书、喷门头、印宣传单的时候,这两个标准远远不够用。过去一个月,我因为…

2026/10/12 7:32:21 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →