Skip to content

iceberg: bump iceberg-go to allow v1 manifests inside v2 manifest lists#4404

Merged
Jeffail merged 2 commits intomainfrom
con-459
May 7, 2026
Merged

iceberg: bump iceberg-go to allow v1 manifests inside v2 manifest lists#4404
Jeffail merged 2 commits intomainfrom
con-459

Conversation

@Jeffail
Copy link
Copy Markdown
Contributor

@Jeffail Jeffail commented May 7, 2026

Summary

  • Bumps github.com/apache/iceberg-go to the merge commit of apache/iceberg-go#1030, which relaxes ManifestListWriter.AddManifests so a v2 manifest list may reference v1 manifest files (and a v3 list may reference v1/v2 manifests), per the Iceberg spec's mixed-version inheritance rules.
  • Without that fix, every commit on a table that was upgraded from v1 to v2 — whether via Transaction.UpgradeFormatVersion in internal/impl/iceberg/committer.go or out-of-band by another engine such as Spark or Hive — failed permanently with invalid argument: ManifestListWriter only supports version 2 manifest files, because historical v1 manifests resurfaced through existingManifests() on every commit.
  • Adds a regression test (TestCON459_V2ManifestListAcceptsV1Manifest) that constructs a v1 ManifestFile via the public iceberg-go API, writes it through WriteManifestList(2, ...), and asserts that the decoded entry inherits content=data and sequence_number=min_sequence_number=0. If the upstream fix ever regresses, this test fails.

Resolves CON-459.

Test plan

  • task fmt
  • task lint — 0 issues
  • task test — full unit + template suite passes, including the new regression test
  • Customer (Comcast) confirms the failure no longer reproduces against an edge build that includes this bump

Pulls in apache/iceberg-go#1030, which fixes the upstream
ManifestListWriter rejecting v1 manifest files when writing a v2
manifest list. Without this, every commit on a table that was upgraded
from v1 to v2 (whether via Transaction.UpgradeFormatVersion in the
committer or out-of-band by another engine) failed with
"ManifestListWriter only supports version 2 manifest files" because the
historical v1 manifests surfaced through existingManifests() on every
commit and the v2 writer rejected them.

Adds a regression test that pins the upstream behaviour: a v1
ManifestFile passed to WriteManifestList(2, ...) must round-trip and
the decoded entry must inherit content=data and
sequence_number=min_sequence_number=0 per the Iceberg spec.
@claude
Copy link
Copy Markdown

claude Bot commented May 7, 2026

Commits
LGTM

Review
Single-commit dep bump of iceberg-go to pull in apache/iceberg-go#1030, with a regression test that pins the upstream behaviour. All other go.mod/go.sum churn is transitive.

LGTM

Comment thread internal/impl/iceberg/con459_repro_test.go Outdated
Co-authored-by: Joseph Woodward <joseph.woodward@redpanda.com>
@Jeffail Jeffail merged commit 32b4bea into main May 7, 2026
6 checks passed
@Jeffail Jeffail deleted the con-459 branch May 7, 2026 09:15
// out-of-band) explodes when existingManifests() surfaces the historical
// v1 manifests. If this test starts failing after a future bump, the bug
// has regressed upstream.
func TestCON459_V2ManifestListAcceptsV1Manifest(t *testing.T) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test function names should use camelCase without underscores per the project's test patterns ("Test function names use camelCase, not underscores. Write TestMyProcessorBadArgs, not TestMyProcessor_BadArgs."). Consider renaming to TestCON459V2ManifestListAcceptsV1Manifest.

@claude
Copy link
Copy Markdown

claude Bot commented May 7, 2026

Commits

  1. The second commit Update internal/impl/iceberg/con459_repro_test.go (bb1ff82) violates the commit message policy — it doesn't match system: message / chore: / sentence-case repo-wide form, the message just names a file rather than describing the change, and it looks like an auto-generated GitHub web-edit message that should have been squashed into the first commit (iceberg: bump iceberg-go to allow v1 manifests inside v2 manifest lists).

Review
Dependency bump of iceberg-go to pull in apache/iceberg-go#1030 plus a regression test pinning the upstream behavior. The test correctly exercises the public iceberg-go API and asserts the inheritance contract; the new file matches the package's existing RCL header convention. The transitive substrait-io/substrait-go v7→v8 major bump is not used directly in this repo, so it's safe.

  1. Test function name TestCON459_V2ManifestListAcceptsV1Manifest uses an underscore, violating the camelCase convention documented in the test patterns. Inline comment posted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants