#20085·tikv

增强事务性 RPC 兼容性保护

作者: zyguan创建于 2026年9月15日更新于 2026年9月16日
标签type/enhancement

□ 背景情况

交易式RPC和锁格式演化可以引入更老的客户端无法安全解读的语义. 共享锁是最近确认的例子:一个老客户端可能会将“LockInfo.shared lock infos”包装器误解为假锁,然后发出无效的后续请求,如“CheckTxn Status(lock ts=0)”或“ResolveLock(start version=0)”。

这个跟踪问题涵盖了交易RPC的故障闭塞相容性防御. 当调用者无法安全处理交易-protocol语义时,tikv必须明确拒绝这条路径,而不要暴露可能被误解或返回部分成功的数据.

□ 核心设计

  • 为交易中的RPC呼叫者引入请求级兼容声明,同时引入结构不相容请求错误。 具体编码和治理模式仍然需要对设计进行审查;候选人包括单一交易协议版本和基于能力的替代办法。
  • 保持兼容性检查特征。 tikv在会暴露,消耗,或错误地变换出新的交易语义的路径上检查呼叫者声明;共享锁路径是第一个执行范围.
  • 对于一个不兼容的呼叫器,返回一个已失效的闭合响应:没有共享锁包、假锁、部分成功或可用正常结果。
  • 独立地拒绝无效的交易参数,特别是假的零时标交易请求,在其到达交易状态突变或断言路径之前.
  • 使用`内容.要求-来源 ' 来电审计和观察。 它不是一个认证或授权机制,在第一阶段, " 不知名 " 的打电话者受到审计而不是拒绝。
  • 确保新的和遗留的呼叫者安全地失败:新呼叫者承认结构化错误为终端,而遗留的呼叫者不得将不相容的道路视为成功。

□ 发展任务

  • kvproto——定义相容性声明,结构不相容-请求错误,所需的交易-程序常数,以及任何需要的"请Origin"/存储元数据扩展;再生成并验证语言绑定.
  • https://GitHub.com/pingcap/kvproto/pull/1534
  • pd - 如果所选设计需要 Store- side 兼容元数据,则通过“ PutStore”、“ GetStore” 和“ Get AllStores” ,包括现有的 Store 更新、重启/回滚行为和遗留 Store , 坚持并正确返回。
  • https://GitHub.com/tikv/pd/pull/11263 (中文(简体) ).
  • []tikv——实施RPC录入,共享锁定特定故障闭塞检查,结构化错误编码与遗留安全行为,交易请求验证无效,调用人-审计可观察,受影响交易RPC的端到端回归覆盖.
  • tiflash(包括客户端-c) — 设置 “请OriginTiFlash” ,为直接交易的RPC注入和动态选择兼容性声明,安全处理不相容的响应,并验证单独的ReadIndex . . . . . . .