Repository navigation
chore(deps): prepare for DataFusion 56 (draft until release) - #846
jensholdgaard wants to merge 70 commits into
Conversation
Patch every datafusion-* crate to apache/datafusion main at f029b944 (carries #24770, the #24769 row-group pruning fix) and move the workspace to the arrow/parquet 60 + object_store 0.14 set that main requires. The workspace checks clean with no source changes. Draft-only: the git patch is swapped for the crates.io release when DataFusion 56 (or a 55.x with the backport) ships. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
TlsSettings::load pins the ServerConfig to ring so the listener does not depend on which rustls providers other crates compile in, but the mTLS path built its WebPkiClientVerifier with the auto-detecting builder. Once a dependency enables rustls/aws-lc-rs next to ring (object_store 0.14's `aws` feature does), that builder panics at startup with "Could not automatically determine the process-level CryptoProvider", failing RFC0030.4 and RFC0030.8. Build the verifier from the same provider. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Claude <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Claude <[email protected]>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
…ta license The upstream-revision patch makes cargo-deny see apache/datafusion as a git source, so allow exactly that repository (removed with the patch). object_store 0.14's reqwest 0.13 brings rustls-platform-verifier and with it webpki-root-certs, the same Mozilla CA data as webpki-roots under CDLA-Permissive-2.0; give it the same per-crate exception in deny.toml and about.toml, and regenerate THIRD-PARTY-LICENSES.md with cargo-about 0.9.1. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Claude <[email protected]>
…kspace The fuzz harness is its own workspace and depends on ourios-querier, so the root [patch.crates-io] does not reach it: its lockfile went stale (failing the `--locked` gate in the cargo deny job) and, unpatched, it would pair crates.io DataFusion 55 (arrow 59) with ourios-parquet's arrow 60. Copy the patch block, removed together with the root one, and refresh fuzz/Cargo.lock. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Claude <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Claude <[email protected]>
|
Commit identity for any further commits on this PR (maintainer decision, 2026-09-27). The cloud environment's default git identity is Keep using |
Resolve the Cargo.lock conflict by keeping this branch's lockfile and letting cargo resolve main's new dependencies onto it. Main's new ourios-ingester and ourios-querier dev-dependencies on object_store 0.13 move to 0.14 so the tree keeps a single ObjectStore trait, matching ourios-parquet and the patched DataFusion. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
Resolve the Cargo.lock conflict (main's v0.11.1 release bump and new dev-dependencies) by keeping this branch's lockfile and letting cargo resolve main's manifests onto it; no new object_store, arrow or DataFusion pins arrived, so no manifest edits were needed. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
|
CI now runs stable Rust 1.99.0 (released 2026-09-28). Its clippy adds the lint
Neither crate is touched by this PR's diff. The same code is on There's no fix to port yet: no commit on
Once a fix lands on Separately, Generated by Claude Code |
Brings in the clippy 1.99 fix (#901) that this branch's CI needs, plus main's v0.11.2 changes. Merges cleanly; both lockfiles stay current. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
Main's dependency pinning (#902) turned the ourios-ingester and ourios-querier object_store dev-dependencies into exact `=0.13.2` pins, conflicting with this branch's 0.14 bump. Keep main's exact-pin style at this branch's locked version, `=0.14.2`, so the tree still has a single ObjectStore trait; take main's other pins and the 1.99.0 toolchain pin (#906) as they are. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
Main's durable template-id allocation (RFC 0059, #911) moves ourios-ingester's object_store and async-trait from dev- to regular dependencies, conflicting with this branch's object_store bump. Take main's layout and keep object_store at this branch's `=0.14.2`, so the tree still has a single ObjectStore trait; the RFC 0059 code compiles unchanged against object_store 0.14. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
Main's RFC0059.6 SIGTERM test adds an exact `arrow-array = "=59.3.0"` dev-dependency to ourios-server next to its parquet pin. Take main's lines and keep both at this branch's arrow/parquet `=60.0.0`, so the tree still carries one arrow and one parquet. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
Keep object_store at =0.14.2 in the querier dev-dependencies, and pass the new `GetResult::extensions` field through `MeteredStore::get_opts` so HTTP response extensions survive the metering wrapper. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Y2NNRu7nTGmcK4BoWUy3s2 Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
|
Why it isn't this PR's. Cause. This is the race #1243 fixed in the sibling test Proposed fix for /// Wait until `follower` follows `leader` and holds its node: the
/// `NotLeader` hint is the leader's node from the follower's membership,
/// which a heartbeat can precede.
async fn follows(cluster: &Cluster, follower: usize, leader: usize) { /* #1243's wait */ }Then Local checks:
No fix exists on Generated by Claude Code |
There was a problem hiding this comment.
🔵 Needs a closer look
The unreleased DataFusion query/storage upgrade requires maintainer sign-off and release-time CAS, pruning, and benchmark validation that could not be performed in this review environment.
No open issues 🎉
Review effort: Balanced
Repoint the [patch.crates-io] DataFusion crates (root and fuzz) from the upstream main revision to 56.0.0-rc1 (cce6374), which carries the #24769 row-group pruning fix (#24770). The patched crates now report 56.0.0, so the workspace asks for datafusion "56", and the arrow and parquet pins move to the 60.1.0 that release builds on. object_store stays 0.14.2. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01SBv6mCsBchZiS6CDs9daJg Signed-off-by: Jens Holdgaard Pedersen <[email protected]>
|
DataFusion 56.0.0-rc1 is tagged upstream. This branch now builds against it, as of
What changed in this commit:
Local checks:
One thing to decide at release:
Next: the release vote stays open at least 72 hours. When 56.0.0 is on crates.io, the steps under "What must happen at release" in the PR body apply. I'll notify you then. The PR stays a draft. Generated by Claude Code |
There was a problem hiding this comment.
🔵 Needs a closer look
The coordinated RC-backed upgrade still requires maintainer confirmation of the final dependency graph and RFC 0021 phase-2b gate, plus S3 CAS and pruning/performance validation not established by the supplied local results.
No open issues 🎉
Review effort: Balanced
There was a problem hiding this comment.
Gates Failed
Enforce advisory code health rules
(1 file with Code Duplication)
Our agent can fix these. Install it.
Gates Passed
5 Quality Gates Passed
Reason for failure
| Enforce advisory code health rules | Violations | Code Health Impact | |
|---|---|---|---|
| decoder_panics.rs | 1 advisory rule | 10.00 → 9.39 | Suppress |
Quality Gate Profile: Pay Down Tech Debt
Install CodeScene MCP: safeguard and uplift AI-generated code. Catch issues early with our IDE extension and CLI tool.
rc1 with
So |
A second, stronger reason to keep The same statistics-to-constant shortcut returns wrong values. Parquet min/max statistics leave out NaN, so a float column holding one value plus NaNs looks constant, and DataFusion returns that value for the NaN rows. Only Ourios writes OTLP The gate for switching statistics back on is now #27415 and #26490 both fixed in a release, plus a NaN-in-a-promoted-column test of our own before flipping it. |
Summary
This draft builds Ourios against the apache/datafusion
56.0.0-rc1tag (cce6374, since4858ce2), via[patch.crates-io]. That release candidate carries apache/datafusion#24770, the fix for the #24769 row-group pruning regression. The branch also moves the workspace to arrow/parquet 60.1.0 and object_store 0.14.2. It stays a draft until DataFusion 56.0.0 is on crates.io.Commits:
37b8eacchore(deps): build against upstream datafusion main with arrow 60 (maintainer's commit). I re-checked its claim:cargo clippy --all-targets --all-features -D warningsis clean on it with no source changes.2bf6b44fix(serving): pin the client-cert verifier to the ring provider.awsfeature hard-enablesrustls/aws-lc-rs. Withringalso on, rustls can no longer pick a provider automatically.WebPkiClientVerifier::builder()panicked on the mTLS path, failing RFC0030.4 and RFC0030.8.18fdb31chore(deps): admit the datafusion git source and the webpki-root-certs data licence.deny.tomlgetsallow-gitfor exactlyhttps://github.com/apache/datafusion.webpki-root-certsis new, arriving via reqwest 0.13 and rustls-platform-verifier. It carries the same Mozilla CA data under the same CDLA-Permissive-2.0 licence aswebpki-roots, so it gets the same per-crate exception indeny.tomlandabout.toml. (Main has since added the same exception itself.)THIRD-PARTY-LICENSES.mdis regenerated with cargo-about 0.9.1.65a588dchore(fuzz): mirror the patch into the standalone fuzz workspace.ourios-querierbut doesn't inherit the root patch. Its lockfile went stale and failed the--lockedstep in the cargo deny job.cargo check --manifest-path fuzz/Cargo.toml --lockedis clean.main. These keep this branch's lockfile and versions (arrow/parquet 60, object_store 0.14) and take main's other bumps. Before rc1 they also repointeddatafusionat the patched revision when main's lockfile locked a newer crates.io 55.x (cargo update -p [email protected] --precise 55.1.0).1eb0789also moves this branch's zstd 0.14 line (pulled in by arrow 60) to the patched 0.14.3 / zstd-safe 8.2.0 for RUSTSEC-2026-0391. Main can only waive that advisory, because it is still on zstd 0.13.fda45abkeeps arrow/parquet 60.0.0 over main's 59.3.2 bump.GetResult::extensionsfield:8314897: main'sMeteredStore::get_opts(feat: object-store client, blocking-bridge and async-runtime metrics #937,crates/ourios-parquet/src/store/metered.rs) now carriesextensionsthrough the wrapper, keeping the HTTP response extensions.08ef265: main'sListedSizesHEAD answer (perf(querier): answer the per-file head from the resolving listing #1131,crates/ourios-querier/src/listed_sizes.rs) setsextensionsto the default.28ec00a(maintainer) test(parquet): split the decoder-panic fixtures parquet 60 now rejects.4858ce2chore(deps): build against the datafusion 56.0.0-rc1 tag.mainrevisionf029b944to the rc1 commitcce6374, in both the root andfuzz/.ourios-querierandourios-df-otelnow ask fordatafusion = "56".=60.0.0to=60.1.0. object_store stays=0.14.2.API breaks
GetResult::extensions. Code that destructures or builds aGetResultmust name it. Two sites on main do:MeteredStore::get_opts(feat: object-store client, blocking-bridge and async-runtime metrics #937) andListedSizes(perf(querier): answer the per-file head from the resolving listing #1131), both adapted in commit 6.awsfeature pulls in aws-lc-rs next to our ring. Commit 2 / fix(serving): pin the client-cert verifier to the ring provider #845 fixes it. Side effects:rust-version = "1.95.0"and pulls inparking_lot 0.13(also 1.95). The workspace still declares 1.94. See "What must happen at release".Test results
Latest local run, on
4858ce2(rc1), rustc 1.99.1:--all-features),cargo deny, cargo-about (regenerated), the AGENTS.md citation check andcargo check --lockedfor the fuzz crate are all clean.cargo test --all-featuresforourios-parquet,ourios-querier,ourios-df-otel,ourios-ingesterandourios-serverpasses, except root-only permission tests. Those usechmod/read-only helpers that uid 0 ignores, and they pass on CI's unprivileged runner.Earlier runs, with rustc/clippy 1.98.1 on
f029b944:ourios-querier+ourios-df-otel(all RFC 0002 DSL, RFC 0017, RFC 0044, RFC0007.x)Earlier findings:
Failing in both configurations (environmental, not caused by this PR):
ourios-walrfc0008_6_persistent_rotation_failure_refuses_appends_for_good. It makes the WAL root read-only withchmod 0555, but my container runs as uid 0, which ignores the mode. It passes on CI's unprivileged runner.Failing only with statistics on (the B1 / RFC 0044 pruning gate):
execution::rfc0007_1_pushdown_prunes_row_groups: pruning works (row_groups_pruned: 1, scanned: 1), butbytes_read: 0fails the "scanned row group reads bytes" assertion.rfc0044_body_equality::rfc0044_7_pruning_engages_across_partitions:row_groups_pruned: 0, scanned: 2. #24770 doesn't cover ourbody ==predicate shape.stats_alone_unsatisfiable,datasource-parquet/src/opener/mod.rs) only prunes when the predicate reduces to a barefalse/NULL literal after statistics constants are substituted.array_element(separators, k) = …andparamsterms over list columns, and those never become constants.PhysicalExprSimplifieronly does constant evaluation,NOTand unwrap-cast, so it doesn't foldfalse AND <non-constant>. The predicate never collapses.template_id/bodycolumn references, so the pruning predicate has nothing to prune on either. This is still the #24769 shape.So the statistics flip is not in this PR. It's on branch
claude/datafusion-56-collect-statistics-probe(commitedccf1a) for reproduction.What must happen at release
[patch.crates-io]blocks for the crates.io release.Cargo.tomlandfuzz/Cargo.toml.datafusion = "56"and the=60.1.0arrow/parquet pins are already in place (since4858ce2), so only the patch blocks go. Refresh both lockfiles and regenerateTHIRD-PARTY-LICENSES.md.allow-gitentry indeny.tomlat the same time.rust-versionfrom 1.94 to at least 1.95, or record why it stays. DataFusion 56 declares 1.95, so 1.94 is no longer true. CI's "fuzz toolchain pin" check compares the fuzz nightly against this value.collect_statistics = falseworkaround and its assertion only once RFC0044.7 passes with statistics on. It didn't pass onf029b944(see above), so shipping DF 56 alone isn't enough.AND), or we keep the override.bytes_read > 0guard is still the right assertion with statistics on.Upstream timeline
branch-56was cut on 2026-11-02/03. The "Prepare for 56.0.0 release" commit landed on 2026-11-07, and backports followed.56.0.0-rc1was tagged atcce6374(2026-11-12). It is version 56.0.0 on arrow/parquet 60.1.0 and object_store 0.14.2, and its changelog lists #24770. The vote runs at least 72 hours. As of 2026-11-13, crates.io's newest is 55.2.0.be5a96e. It fixes #24769.Invariants / hazards (AGENTS.md §3–4)
Related
#314, RFC 0021 (
docs/rfcs/0021-datafusion-arrow-upgrade.md), #845 (merged)Checklist
cargo fmtcleancargo clippyclean (no new warnings)28ec00a); I changed no tests.CHANGELOG.mdupdated: at release (RFC 0021)🤖 Generated with Claude Code
https://claude.ai/code/session_01SBv6mCsBchZiS6CDs9daJg