首页/新闻资讯/正文详情

Vitess v17.0.3 版本解读:`--grpc-send-session-in-streaming` 标志与 StreamExecute 流式事务兼容性修复

发布时间:2026/9/20 23:09:01 来源:云帆数科 栏目:资讯中心
Vitess v17.0.3 版本解读:`--grpc-send-session-in-streaming` 标志与 StreamExecute 流式事务兼容性修复
数据库分布式数据库云原生后端数据存储【免费下载链接】vitessVitess is a database clustering system for horizontal scaling of MySQL.项目地址https://gitcode.com/gh_mirrors/vi/vitess点击查看免费下载导读Vitess v17.0.3 是 v17.0 系列的一个关键补丁版本共合并 34 个 Pull Request。该版本最重要的技术变更是新增 VTGate 命令行标志--grpc-send-session-in-streaming用于修复 v17.0.0 引入的StreamExecutegRPC API 破坏性变更给客户端升级带来的兼容性问题。本文将以该标志为核心结合仓库源码剖析其实现原理、客户端适配方式与升级注意事项并顺带梳理 v17.0.3 在查询服务、VReplication、Online DDL、Evalengine 等模块的修复亮点。版本总览v17.0.3 的定位与发布背景v17.0.3 属于 v17.0 系列的维护分支release-17.0其正式发布说明位于 changelog/17.0/17.0.3/release_notes.md完整的逐项变更清单见 changelog/17.0/17.0.3/changelog.md。该版本的核心特征可以概括为34 个合并 PR全部以 backport 形式从主干合入 release-17.0 分支1 个重大变更Major Change新增 VTGate 标志--grpc-send-session-in-streaming修复覆盖 Build/CI、CLI、Cluster management、Evalengine、Online DDL、Query Serving、Throttler、VReplication 等多个领域构建基线升级Go 版本升级到go1.20.8并新增独立的 vtorc 容器镜像。版本说明中特别鸣谢了 ajm188、frouioui、mattlord、rohit-nayak-ps 等贡献者其余为自动化机器人账号。核心变更--grpc-send-session-in-streaming标志变更背景v17.0.0 引入的破坏性变更在 v17.0.0 中Vitess 改进了StreamExecutegRPC API 的行为使其在流式响应的最后一个数据包中携带 session从而为流式执行场景提供事务支持。这一改动本身是合理的功能增强但它给依赖旧行为的客户端带来了升级问题——很多客户端只期望收到纯查询结果数据包无法处理多出来的 session 包导致升级 v17.0.0 后出现兼容性故障。这正是 v17.0.3 修复的核心问题。v17.0.3 引入了--grpc-send-session-in-streaming标志将是否在流式响应末尾发送 session变为可由运维显式控制的行为默认关闭从 v17.0.3 起该标志默认值为false即默认不发送 session 包恢复到旧客户端的预期行为按需开启只有客户端代码已经完成适配能识别并消费末尾的 session 包之后才应显式开启该标志。版本说明原文对此的表述为The client should enable it only when they have made the required changes to expect such a packet即开启该标志的前提是客户端已完成相应改造。服务端实现session 如何作为最后一个数据包发送虽然 v17.0.3 中该行为默认关闭但仓库当前的实现已经完整保留了末尾发送 session的代码路径。以 go/vt/vtgate/grpcvtgateservice/server.go 中的StreamExecute方法为例其核心逻辑为处理请求中的 session若为空则创建一个默认的{Autocommit: true}session向后兼容处理调用底层vtg.server.StreamExecute通过回调函数把每个结果包stream.Send给客户端流式执行结束后无论是否发生错误都通过stream.Send发送最后一个StreamExecuteResponse其中只包含Session字段代码注释明确说明Even if there is an error, session could have been modified. So, this needs to be sent back to the client. Session is sent in the last stream response.聚合执行错误与最后发送的错误后统一以 gRPC 错误形式返回。也就是说从协议层面看session 包携带的是本次流式执行最终修改后的 session 状态如自增、临时表、事务上下文等客户端若在流式执行中开启了事务需要从这最后一个包里取回更新后的 session 以继续后续操作。即便执行出错session 也可能已被修改因此仍然需要回传。协议层定义StreamExecuteResponseStreamExecuteResponse消息定义于 proto/vtgate.protoresult字段 1携带查询结果数据其中第一个包只含 Fields 信息列定义后续包才是真正的行数据且每次 Send 可能携带多行session仅在末尾包中出现携带执行后的 session。StreamExecute属于服务端流式server streamingRPC客户端发送一次请求含 SQL、绑定变量与当前 session服务端持续返回多个StreamExecuteResponse包。客户端消费完所有结果包后还应检查是否有最后一个 session 包从而维持事务状态。客户端适配何时需要升级、如何升级对应的 gRPC 客户端实现位于 go/vt/vtgate/grpcvtgateconn/conn.go其StreamExecute方法接收一个processResponse回调逐包处理响应StreamExecuteMulti则是多语句变体。测试侧的实现可见 go/vt/vtgate/grpcvtgateconn/suite_test.go其中fakeVTGateService.StreamExecute的签名(…, callback func(*sqltypes.Result) error) (*vtgatepb.Session, error)正是结果包经回调消费、session 单独返回这一模型的直接体现。对客户端开发者的适配要求可以归纳为识别末尾 session 包逐包消费StreamExecuteResponse当包内Session字段非空或结果字段为空且位于流末尾时将其解析为本次执行后的 session按标志决定行为服务端未开启--grpc-send-session-in-streaming时响应流末尾没有 session 包客户端不应阻塞等待事务场景联动若客户端使用StreamExecute开启事务如BEGIN后的流式读取只有开启该标志才能取回更新后的 session 并正确执行后续的COMMIT/ROLLBACK。升级注意事项与兼容性矩阵对于从 v17.0.0/v17.0.1/v17.0.2 升级到 v17.0.3 的用户若你的客户端未做过任何适配v17.0.3 默认关闭该行为可平滑升级无需改动若你的客户端已经适配了末尾 session 包例如已在 v17.0.0 上完成改造升级到 v17.0.3 后需要在 VTGate 启动参数中显式添加--grpc-send-session-in-streaming否则将无法再收到 session 包若你在 v17.0.0 上依赖流式响应末尾必有 session的中间行为v17.0.3 后必须显式开启该标志以维持行为一致。该标志的后续生命周期跨版本演进从仓库中不同版本的 release notes 可以完整追溯该标志的生命周期这也印证了其在流式事务支持中的长期价值v18.0.0changelog/18.0/18.0.0/release_notes.md继续记录该标志说明其默认关闭的语义与 v17.0.3 保持一致v22.0.0changelog/22.0/22.0.0/release_notes.md该标志被标记为 deprecated且默认值改为true即session 将始终作为 StreamExecute RPC 响应的一部分返回说明社区已经默认客户端完成适配v24.0.0changelog/24.0/24.0.0/release_notes.md该标志被正式移除运维需要清理启动脚本或配置中的相关参数。这一演进路径说明v17.0.3 的该标志并非临时补丁而是 Vitess 流式 API 事务支持从默认行为变更走向显式可控再到默认落地的过渡枢纽。当前仓库主干的StreamExecute实现go/vt/vtgate/grpcvtgateservice/server.go已无条件地在末尾发送 session 包正是这一演进最终状态的源码证据。v17.0.3 其他修复亮点除上述重大变更外v17.0.3 还包含一批值得关注的修复详见 changelog/17.0/17.0.3/changelog.mdQuery Serving查询服务重写USING为ON条件修复 join 中USING子句的改写逻辑保证连接条件生成正确处理大量谓词不超时修复在谓词数量巨大时的查询超时问题修复 join 引擎 OLAP 流式执行的数据竞争#14012代价估算纳入 subshard opcode#14023为 stream execute gRPC API 新增 session 标志#14046即本文核心变更的原始 PR。VReplication数据迁移与流式复制正确处理 JSON 列的 SQL NULL 与 JSONnull#13944从其他 tablet 恢复时正确拷贝已复制的行计数到本地计数器#13949VDiff 修复默认 source/target cell 处理、TabletPicker 场景下 cell 值切分、以及删除 VDiff 前清理 controller 等问题#13969/#14099/#14107。Online DDL 与 TableGC修复被取消迁移的completed_timestamp为空的问题#13928清理被取消迁移的产物并支持 DDL 策略标志--retain-artifactsduration#14029TableGC 支持DROP VIEW#14020。Evalengine、Throttler 与其他Evalengine将UUID()函数标记为非恒定non-constant避免错误缓存#14051Throttler修复非 leader tablet 上探针列表为空的问题#13926BackupShard修复从自身标志而非全局标志获取选项的问题#13813CI/构建Go 版本升级至go1.20.8#13934新增独立 vtorc 容器#14126并启用 e2e race 测试失败检测#13654。升级建议结合版本说明与源码从 v17.0.x 升级到 v17.0.3 的建议流程为评估客户端确认是否有代码依赖StreamExecute流式响应末尾的 session 包分阶段切换先以默认配置标志关闭升级 VTGate验证旧客户端不受影响再分批完成客户端适配后为需要的 keyspace/集群显式开启--grpc-send-session-in-streaming回归测试重点覆盖流式查询下的多语句、事务BEGIN/COMMIT、大结果集分页以及出错场景因为无论执行是否成功session 包都可能在末尾出现留意未来版本该标志在 v22 默认开启并弃用、在 v24 移除长期规划上应尽早完成客户端对末尾 session 包的适配避免被后续大版本强制升级。参考资料v17.0.3 Release Notesv17.0.3 完整 Changelogv17.0.3 SummaryStreamExecute 服务端实现StreamExecuteResponse 协议定义StreamExecute 客户端实现StreamExecute 测试实现v18.0.0 中该标志的记录v22.0.0 中该标志的弃用记录v24.0.0 中该标志的移除记录赞分享数据库分布式数据库云原生后端数据存储【免费下载链接】vitessVitess is a database clustering system for horizontal scaling of MySQL.项目地址https://gitcode.com/gh_mirrors/vi/vitess点击查看免费下载相关推荐Vitess v17.0.3 新特性解析VTGate gRPC StreamExecute 会话回传标志 --grpc-send-session-in-streamingVitess v17.0.3 新特性解析VTGate gRPC StreamExecute 会话回传标志 grpc send session in strea数据库分布式数据库云原生后端数据存储Vitess v17.0.3 版本发布深度解析StreamExecute 会话标志、Online DDL 与 VReplication 关键修复Vitess v17.0.3 版本发布深度解析StreamExecute 会话标志、Online DDL 与 VReplication 关键修复 导读 本文以数据库分布式数据库云原生后端数据存储Vitess v17.0.7 补丁版本解读事务限流、查询规划与 VReplication 健康检查修复全解析Vitess v17.0.7 补丁版本解读事务限流、查询规划与 VReplication 健康检查修复全解析 导读 Vitess v17.0.7 是 v17数据库分布式数据库云原生后端数据存储创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

OpenDesign 设计系统 2.0 溯源与 Token 契约解析:以 Retro 包的 Source Evidence 为例
OpenDesign 设计系统 2.0 溯源与 Token 契约解析:以 Retro 包的 Source Evidence 为例

OpenDesign 设计系统 2.0 溯源与 Token 契约解析:以 Retro 包的 Source Evidence 为例 【免费下载链接】open-design 🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. &… · 2026/9/20 23:09:01

AutoCAD2021机械制图200例:从制图逻辑到高效出图实战
AutoCAD2021机械制图200例:从制图逻辑到高效出图实战

简介:这是一份面向机械制图初学者及中级用户的AutoCAD 2021参考PDF,全书以200个经典实例贯穿二维图形、三维图形和产品模型三大篇章,内容由浅入深。二维部分系统讲解零件标准件、常用零件图、定位零件、螺纹零件、工具零件、盘盖零件、剖视图… · 2026/9/20 23:08:01

试验设计与数据分析实战:从正交试验到响应面优化
试验设计与数据分析实战:从正交试验到响应面优化

简介:围绕电子科技大学《优化试验设计与数据分析》课程制作的PPT学习教案,面向需要系统掌握试验设计原理、正交试验方法及数理统计分析的高校学生、科研人员和工程技术人员。内容从试验设计的历史起源讲起,涵盖Fisher田间试验、田口玄一正交试… · 2026/9/20 23:08:01

react-admin 实时订阅实战:深入掌握 `useSubscribeToRecord` 单记录事件订阅 Hook
react-admin 实时订阅实战:深入掌握 `useSubscribeToRecord` 单记录事件订阅 Hook

react-admin 实时订阅实战:深入掌握 useSubscribeToRecord 单记录事件订阅 Hook 【免费下载链接】react-admin A frontend Framework for single-page applications on top of REST/GraphQL APIs, using TypeScript, React and Material Design 项目地址: https:/… · 2026/9/21 3:28:00

在 Vue 3 应用中接入 json-render DevTools:@json-render/devtools-vue 完整接入与源码解析
在 Vue 3 应用中接入 json-render DevTools:@json-render/devtools-vue 完整接入与源码解析

在 Vue 3 应用中接入 json-render DevTools:json-render/devtools-vue 完整接入与源码解析 【免费下载链接】json-render The Generative UI framework 项目地址: https://gitcode.com/GitHub_Trending/js/json-render json-render/devtools-vue 是 json-ren… · 2026/9/21 3:28:00

Etherpad 自更新子系统 Tier 3 深度解析:带宽限窗口的自动升级(Auto-Update with Grace Window)
Etherpad 自更新子系统 Tier 3 深度解析:带宽限窗口的自动升级(Auto-Update with Grace Window)

后端协同办公WebSocket前端富文本 【免费下载链接】etherpad Etherpad: A modern really-real-time collaborative document editor. 项目地址: https://gitcode.com/gh_mirrors/et/etherpad 点击查看 免费下载 Etherpad 内置的"自更新子系统"&#xff0… · 2026/9/21 3:28:00

lark-cli apps +plugin-list 命令完全指南:妙搭应用插件声明与安装状态核验
lark-cli apps +plugin-list 命令完全指南:妙搭应用插件声明与安装状态核验

CLIAI 技能 【免费下载链接】cli The official Lark/飞书 CLI tool, maintained by the larksuite team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Calendar, Mail, Tasks, Meetings, and more, with 200 co… · 2026/9/21 3:28:00

Gradle 属性命名规范 ADR-0010:org.gradle 前缀体系下的 public/internal 与特性稳定性契约
Gradle 属性命名规范 ADR-0010:org.gradle 前缀体系下的 public/internal 与特性稳定性契约

构建工具开发工具 【免费下载链接】gradle Adaptable, fast automation for all 项目地址: https://gitcode.com/gh_mirrors/gr/gradle 点击查看 免费下载 本文是 Gradle 仓库 architecture/standards/0010-gradle-properties-naming.md 这份架构决策记录&#xff… · 2026/9/21 3:28:00

RxJS 4 `partition` 操作符深度解析:按谓词将一条 Observable 流一分为二
RxJS 4 `partition` 操作符深度解析:按谓词将一条 Observable 流一分为二

后端 【免费下载链接】RxJS The Reactive Extensions for JavaScript 项目地址: https://gitcode.com/gh_mirrors/rxj/RxJS 点击查看 免费下载 本文基于 RxJS v4(The Reactive Extensions for JavaScript)官方 API 文档与仓库源码&#xff0… · 2026/9/21 3:27:00

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

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

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码