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

Neon walproposer进程状态机

WAL Proposer 完整状态机

全局状态:wp->state(WalProposerState)

WPS_COLLECTING_TERMS → WPS_CAMPAIGN → WPS_ELECTED 收集握手/term 投票中 已当选,开始流复制

每个 Safekeeper 状态:sk->state(SafekeeperState)

┌──────────────────────────────────────────┐ │ 任何状态出错 → 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_WRITE
TCP握手--HandleConnectionEventCONNECTING_* → (polling)
START_WAL_PUSH-SQL querySendStartWALPushCONNECTING_* → WAIT_EXEC_RESULT
执行结果CopyBoth响应-RecvStartWALPushResultWAIT_EXEC_RESULT → HANDSHAKE_RECV
握手-'g'GreetingSendProposerGreetingHANDSHAKE_RECV
握手响应'g'Greeting-RecvAcceptorGreetingHANDSHAKE_RECV → WAIT_VOTING
投票开始-'v'VoteRequestSendVoteRequestWAIT_VOTING → WAIT_VERDICT
投票响应'v'VoteResponse-RecvVoteResponseWAIT_VERDICT → WAIT_ELECTED
宣布当选-'e'ProposerElectedSendProposerElectedWAIT_ELECTED → SEND_ELECTED_FLUSH
Flush--AsyncFlushStartStreamingSEND_ELECTED_FLUSH →SS_ACTIVE
WAL/心跳'a'AppendResponse'a'AppendRequestHandleActiveStateSS_ACTIVE 循环
断连--ShutdownConnection任意 →SS_OFFLINE

SS_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->state)

WPS_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 流复制 / 心跳阶段
http://www.jsqmd.com/news/1211223/

相关文章:

  • Sa-Token实现多账号认证体系的技术实践
  • 2026年7月最新唐山积家官方售后服务网点地址及客服电话一览 - 积家官方售后服务中心
  • Mac通过SSH远程登录iPhone的完整指南
  • C++服务器日志系统实战:Spdlog异步日志库选型、集成与性能调优
  • CNN、ViT、TVA三种具身智能视觉范式的巅峰对决(6)
  • 多源数据融合分析系统解决方案:从“数据孤岛”到智能决策闭环的完整方法论(PPT)
  • Node2Vec
  • 厦门江诗丹顿回收价格查询与靠谱平台实测排行(2026年7月最新数据) - 嘉价奢侈品回收平台
  • Docker镜像发布与拉取实战:从基础命令到企业级仓库管理
  • 亲身探访上海伯爵官方售后服务中心|最新热线和完整地址(2026年7月最新) - 亨得利钟表维修中心
  • GPT-5.6、Grok 4.5与Fable 5三大AI模型技术解析与应用实践
  • Serverless架构实战:从入门到生产环境部署
  • 嵌入式通信总线协议详解:从UART到CAN的实战指南
  • Sqribble:面向内容创作者的模板驱动型文档自动化系统
  • 系统深层隐患排查:从资源泄漏到可观测性防御体系构建
  • SM2262EN主控SSD量产工具使用指南
  • 手搓生产级 AI Agent 系统(6):系列总结——从 ReAct 到 MCP 的完整架构全景
  • FastAPI:现代Python Web开发的高效实践
  • 苏州江诗丹顿回收价格查询与各大回收平台实测排行(2026年7月最新) - 天价名表回收平台
  • Unity与Mixamo快速实现3D角色动画:从自动绑定到Animator状态机实战
  • 局部敏感哈希(LSH)
  • 从 Chat 到 Agent:Codex 保姆级教程,一篇文章教会你怎样用 Codex 做项目 (万字长文)
  • Docker镜像构建最佳实践:从基础命令到多阶段构建与安全优化
  • 雷达中国官方售后服务中心|最新电话和维修地址权威信息通告(2026年7月更新) - 亨得利官方服务中心
  • 先进工艺下芯片时序分析方法:OCV、AOCV、POCV与LVF对比
  • 《驾驭你的AI同事:WorkBuddy深度精通》032:14.2 智能体间通信与协同
  • 苏州万国回收价格查询及靠谱回收平台实测排行(2026年7月最新) - 诚收名表回收平台
  • 认知的纵贯线:长程预测、抽象攀升与存续的双轨落地
  • 3个小众宝藏软件工具APP,实用又强大
  • 凡诺电子:拆一块显示屏,科普里面的材料构造