[Bug]: Go SDK row coder encodes negative INT32 schema fields as 10 byte varints that Java and Python reject

未关闭
#40,159 2 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@Eliaaazzz 已经在做这个了。

开始于 2026年9月17日。

评估

这个 Issue 还没有评估数据。

描述

go P2
What happened?

The Go SDK reflection row coder encodes int32 struct fields with EncodeVarInt(rv.Int()), the signed 64 bit varint, so a negative value takes 10 bytes: -1 becomes ff ff ff ff ff ff ff ff ff 01 (sdks/go/pkg/beam/core/graph/coder/row_encoder.go, the reflect.Int32 case shared with the other int kinds).

The other SDKs encode the INT32 schema type as the varint of the unsigned 32 bit form of the value, 5 bytes at most:

  • Java VarIntCoder calls VarInt.encode(int), which masks with 0xFFFFFFFFL, so -1 is ff ff ff ff 0f. VarInt.decodeInt throws varint overflow for the Go bytes because they decode to a negative long.
  • Python VarInt32Coder writes v & 0xFFFFFFFF (write_var_int32 in slow_stream.py) and read_var_int32 packs the decoded value with struct.pack('<I', v), which raises for the negative value produced by the Go bytes.

So a Go row with a negative int32 field cannot be read by the Java or Python SDK. Positive values are unaffected, and Go can already read the 5 byte form because reflect.Value.SetInt truncates to 32 bits.

This is the INT32 counterpart of #40151 (INT16). Found while working on #39684.

Issue Priority

Priority: 2 (default / most bugs should be filed as P2)

Issue Components
  • Component: Python SDK
  • Component: Java SDK
  • Component: Go SDK
  • Component: Typescript SDK
  • Component: IO connector
  • Component: Beam YAML
  • Component: Beam examples
  • Component: Beam playground
  • Component: Beam katas
  • Component: Website
  • Component: Infrastructure
  • Component: Spark Runner
  • Component: Flink Runner
  • Component: Prism Runner
  • Component: Twister2 Runner
  • Component: Hazelcast Jet Runner
  • Component: Google Cloud Dataflow Runner
主要语言
Java
星标
8.7k
派生
4.8k
平均合并
2 天 12 小时
30 天内合并 PR
371

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

apache/beam 的其他 Issue

查看 apache/beam 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。