[Bug] Arrow Flight SQL 在大数据量下出现 StringArray 偏移量损坏与内存越界

Viewed 9
  1. 问题描述 (Description)
    在使用 Arrow Flight SQL 获取含有较长 JSON 字符串(约 400 个 int32 元素的数组,单行约 2KB)的数据集时,Go 客户端 (apache/arrow-go) 频繁触发 panic: slice bounds out of range。

经过对内存布局的深度审计(Dump),发现 Doris BE 返回的 RecordBatch 存在严重的协议违规:其 StringArray 的 Offset Buffer(偏移量缓冲区) 与 Data Buffer(数据缓冲区) 状态不一致。

  1. 环境信息 (Environment)
    Doris 版本: 4.0.2

部署模式: 本地部署

客户端: Go 1.2x, github.com/apache/arrow-go/v18

数据特征: 单列为 JSON 字符串,内容为定长 int32 数组(400 元素),单行长度约 2KB。

  1. 复现 (Evidence & Logs)
    我们在 Panic 发生瞬间捕获了 Arrow 数组的内部物理状态:

Plaintext
--- [DEBUG] Arrow Array Memory State Dump ---
Array Type: *array.String
Total Length: 1283
Null Count: 0
Offsets Buffer Length: 1284
Last 10 Offsets: [1244061 0 1246014 0 1247967 0 1249920 0 1251873 0]
Data Buffer Total Size (Bytes): 0
Target Row: 1282 | StartOffset: 1251873, EndOffset: 0

0 Answers