From d2ae8040400f19c9c0ea797ace178f830e0dca5a Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 8 Oct 2026 07:10:35 -0700 Subject: [PATCH] iceberg maintenance: read the returned row before treating EOF as empty parquet-go can return a row alongside io.EOF; a one-row merged file then lost its first_row_id and the manifest list would allocate a fresh range. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- weed/worker/tasks/iceberg/row_lineage.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/weed/worker/tasks/iceberg/row_lineage.go b/weed/worker/tasks/iceberg/row_lineage.go index eeb23bc3f8..48e7250577 100644 --- a/weed/worker/tasks/iceberg/row_lineage.go +++ b/weed/worker/tasks/iceberg/row_lineage.go @@ -372,12 +372,13 @@ func mergedFileFirstRowID(data []byte) (*int64, error) { return nil, nil } rows := make([]parquet.Row, 1) - if _, err := reader.ReadRows(rows); err != nil { - if err == io.EOF { - return nil, nil - } + n, err := reader.ReadRows(rows) + if err != nil && err != io.EOF { return nil, err } + if n == 0 { + return nil, nil + } for _, v := range rows[0] { if v.Column() != leaf.ColumnIndex { continue