Repository navigation
Stable 25.8 Backport of #109551 - Fix crash in Iceberg due to type confusion - #2539
Conversation
…lity-delete-nullability Fix crash in Iceberg due to type confusion
CI triage for #2539Verdict - 11 red checks: 7 PR-caused (all the same test), 2 infra/flaky, 1 process (DCO), 1 aggregate gate.
1. The real failure: the new test fixture does not resolve on stable-25.8 (PR-caused)Every failing stateless suite fails on only one test - SELECT data FROM icebergS3(s3_conn, filename = 'deletes_db/eq_deletes_required_table') ORDER BY data;Note the mangled key Root cause - the fixture bakes local Hadoop paths that this branch cannot translate. The new // metadata/v3.metadata.json
"location": "/out/warehouse/default/eq_deletes_required_table",
"manifest-list": "/out/warehouse/default/eq_deletes_required_table/metadata/snap-667782107838695408-...avro"The existing, working "location": "s3a://test/deletes_db/eq_deletes_table",
"manifest-list": "s3a://test/deletes_db/eq_deletes_table/metadata/snap-...avro"On stable-25.8, path translation goes through
So it drops into the fallback at auto prefix = table_location.substr(0, table_location.size() - common_path.size()); // = "/out/warehou" (12 chars)
return std::string{data_path.substr(prefix.size())}; // = "se/default/..."
Why it is green upstream but red here: upstream Suggested fixes (pick one):
I cannot produce the regenerated fixture here - it needs Spark + the Iceberg Java API, which this container does not have (no build/test infra). The binary Avro/Parquet regeneration needs a human or a CI job. 2. Stress test (amd_debug, amd_ubsan) - infraBoth report This is the Azure blob emulator being unreachable at startup - environmental, no Iceberg/ 3. DCO - processThe PR's single commit ( Bottom line: the backport's C++ change looks fine and is not what is failing - the blocker is the new Iceberg test fixture, which encodes local How would you like me to proceed on the fixture - open a |
Match the upstream 26.3 backport by relocating the fixture under default/ and updating the query to match the embedded table location. This lets the older Iceberg path resolver locate the fixture files. Verified the focused test and 25 randomized runs. Signed-off-by: Mikhail Koviazin <github@mkmk.aleeas.com>
CI triage3 red checks: 0 PR-caused, 2 infra, 1 process (DCO). The actual code change is healthy — the test this PR adds ( 1. Stress test (amd_debug) — infra, not PR-related
The server could not reach the Azure blob emulator (Azurite) at startup and repeatedly failed to boot (pids 1611, 2513, 3411, 4314, 5204, …). No test query ever executed, so the harness produced no 2. Stress test (amd_ubsan) — infra, not PR-relatedIdentical signature, same cause, different pids — Azurite 3. DCO — process, PR-related (not a code problem)DCO is
Fix (author action — this rewrites that commit, i.e. a force-push to git rebase --signoff origin/stable-25.8 # adds Signed-off-by to the unsigned commits
git push --force-with-leaseAlternatively, if this repo has the DCO app's "Set DCO to pass" override enabled, a maintainer can use that, since the content is a verbatim upstream backport. Bottom line: nothing to fix in the code or tests. Re-run the two stress jobs (infra flake), and add a sign-off to |
Fix crash in Iceberg due to type confusion
Changelog category (leave one):
Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):
Fix a crash when reading Iceberg tables with equality delete files. If a column is nullable in the equality delete file but non-nullable in the table schema (or vice versa), the values read from the delete file were inserted into a column of a different type through an unchecked cast (a column type confusion), corrupting the column and crashing the server (ClickHouse#109551 by @mstetsyuk)
CI/CD Options
Exclude tests:
Regression jobs to run: