deps: bump the iceberg-rust pin to bb1e4a4 and document why it is pinned - #6094
Merged
Merged
Conversation
Moves `iceberg` and `iceberg-storage-opendal` from 665c64e4 (2026-09-03) to bb1e4a48 (2026-09-21), 51 commits later. Several of those land in the write path the native writer drives: apache/iceberg-rust#3159 removes a per-row partition-key clone in the record batch partition splitter, apache#3204 and apache#3177 replace Vec<bool> masks with BooleanBuffer, and apache#3171 stops cloning statistics in MinMaxColAggregator::update. The lockfile change is confined to the three iceberg crates: the resolved dependency graph is otherwise identical, same 615 crates with no version changes on either side. Also records why the dependency is a git revision at all, matching the comment convention used for the `regex` pin: no published iceberg-rust release is on our arrow, since 0.10.1 requires arrow/parquet ^58 while Comet is on 59.2.
andygrove
enabled auto-merge
September 23, 2026 13:03
andygrove
disabled auto-merge
September 23, 2026 13:20
andygrove
enabled auto-merge
September 23, 2026 13:20
andygrove
disabled auto-merge
September 23, 2026 13:20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Which issue does this PR close?
Part of the native Iceberg writes epic, #5649.
This is the kind of periodic bump #5645 asks for, but it does not close it: #5645 wants the
policy written down, and this PR only performs one bump and documents why the dependency is a
git revision at all. Leaving #5645 open.
Rationale for this change
native/Cargo.tomlpinsicebergandiceberg-storage-opendalto665c64e4(2026-09-03).Upstream is now 51 commits ahead, and the pin has no note explaining itself, so the reasonable
question "can we just use a release?" has to be re-derived from scratch each time someone looks.
The answer is no, not yet: the latest published iceberg-rust is 0.10.1 (2026-08-01), which
requires arrow/parquet
^58, while Comet is on 59.2. Those ranges are disjoint, and since theiceberg-rust writer API takes
arrow_array::RecordBatchdirectly, a v58RecordBatchis adifferent type from the v59 one we hand it — a compile error, not just a duplicate crate. The
currently pinned revision is in fact upstream's "deps: upgrade to DataFusion 55.0 and
Arrow/Parquet 59.2" commit, i.e. the pin has always been an arrow-alignment pin rather than a
missing-API one. Every
iceberg::path the native crate references already exists in 0.10.1.So the pin stays, but two things are worth doing now:
actually drives: perf(arrow): move partition key into group map instead of cloning per row iceberg-rust#3159 removes a per-row partition-key clone in the record
batch partition splitter, perf(arrow): build partition filter mask with BooleanBufferBuilder iceberg-rust#3204 and perf(arrow): build constant filter masks with BooleanBuffer instead of Vec<bool> iceberg-rust#3177 replace
Vec<bool>masks withBooleanBuffer, and perf(writer): borrow statistics in MinMaxColAggregator::update instead of cloning iceberg-rust#3171 stops cloning statisticsin
MinMaxColAggregator::update(runs per column chunk). These are upstream's own performanceclaims; this PR does not measure them in Comet's context.
regexpin a few lines above, so the next reader gets the arrow constraint and the exitcondition without redoing the analysis.
Two things that look like reasons to bump but are not, checked and recorded so they are not
re-litigated: the rustls 0.23.45 fix (apache/iceberg-rust#3244) does not reach us — our lock
resolves rustls to 0.23.44 on both revisions — and the arrow-parquet group bump
(apache/iceberg-rust#3209) is a no-op since we are already on parquet 59.3.0 either way. This
bump also does not unblock #5898; apache/iceberg-rust#3111 is still open.
What changes are included in this PR?
native/Cargo.toml/native/Cargo.lock: move both iceberg crates from665c64e4tobb1e4a48(2026-09-21). The lockfile change is confined to the three iceberg entries — theresolved graph is otherwise identical, same 615 crates with no version changes on either side,
so there is no transitive churn to review.
release on arrow 59, at which point this becomes a plain version requirement), and a pointer
to Adopt a pin-bump policy for the iceberg-rust dependency #5645.
No Comet code changes were needed, despite heavy upstream churn in modules we import
(
scan/mod.rs+442/-30,scan/task.rs+221/-50,arrow/value.rs,spec/partition.rs,record_batch_partition_splitter.rs).How are these changes tested?
By the existing suites; there is no new behavior to test.
Locally on the final state of the branch:
cargo check --workspace --all-targets— clean, no errors or warnings.cargo clippy --workspace --all-targets -- -D warnings— clean.cargo fmt --all -- --check— clean.cargo test -p datafusion-comet iceberg— 74 passed, 0 failed. This includes the parity teststhat would catch an upstream behavior change in the writer:
iceberg_rust_transform_parity::{bucket,truncate,years_and_months}_agrees_with_iceberg_rust,partition_spec_renders_like_iceberg_java, the*_renders_like_iceberg_javapartition-pathcases,
encoded_manifest_round_trips_through_iceberg_parser, the rolling-grid cases, andtest_metadata_field_id_constants_match_iceberg_rust.cargo test -p datafusion-comet --lib— 430 passed, 0 failed.The Rust tests are not sufficient sign-off on their own here: the native scan's real coverage is
the JVM Iceberg suites, and
scan/mod.rsandscan/task.rschanged substantially upstream. Ihave applied
run-iceberg-testsso CI runs the Iceberg Spark SQL tests against every Icebergversion, per the bump policy sketched in #5645.