Skip to content

Antalya 25.8: bump to 25.8.30 - #2224

Open
zvonand wants to merge 163 commits into
antalya-25.8from
bump/antalya-25.8/25.8.30
Open

Antalya 25.8: bump to 25.8.30#2224
zvonand wants to merge 163 commits into
antalya-25.8from
bump/antalya-25.8/25.8.30

Conversation

@zvonand

@zvonand zvonand commented Aug 17, 2026

Copy link
Copy Markdown
Member

Changelog category (leave one):

  • Not for changelog (changelog entry is not required)

CI/CD Options

Exclude tests:

  • Fast test
  • Integration Tests
  • Stateless tests
  • Stateful tests
  • Performance tests
  • Aarch64 tests
  • All with ASAN
  • All with TSAN
  • All with MSAN
  • All with UBSAN
  • All with Coverage
  • All Regression
  • Disable CI Cache

Regression jobs to run:

  • Fast suites (mostly <1h)
  • Aggregate Functions (2h)
  • Alter (1.5h)
  • Benchmark (30m)
  • ClickHouse Keeper (1h)
  • Iceberg (2h)
  • LDAP (1h)
  • OAuth (5m)
  • Parquet (1.5h)
  • RBAC (1.5h)
  • SSL Server (1h)
  • S3 (2h)
  • S3 Export (2h)
  • Swarms (30m)
  • Tiered Storage (2h)

robot-clickhouse and others added 30 commits May 17, 2026 23:32
…on in JOIN ON with new logical join step
…ettings absent on 25.8

The backport of ClickHouse#104785 (ClickHouse#108444) cherry-picked the master regression test
verbatim. Two of its control queries use settings that do not exist on 25.8 —
`enable_join_runtime_filters` and `use_join_disjunctions_push_down` — so the
test aborts with `UNKNOWN_SETTING` on 25.8. Those optimizations are absent on
25.8, so the "off" controls are redundant with the baseline anyway; drop them
and their reference lines. The core fix assertions (ON-side arrayJoin ghost
removed: count = 6 not 18, ARRAY-JOIN plan count = 1 not 2) and the bilateral
both-side cases are kept. Verified the test passes against a locally-built
25.8 `clickhouse` binary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…oin-test-25.8

Fix 03918 arrayJoin-join-on test on 25.8: drop query variants using settings absent on 25.8
…ing `RemoteHostFilter` for inline DDL params
…4881

Backport ClickHouse#104881 to 25.8: Use explicit flag for secondary on cluster queries
…_log for paimon*Cluster and deltaLakeS3 t…
…4785

Backport ClickHouse#104785 to 25.8: Fix duplicate `arrayJoin` execution in JOIN ON with new logical join step
…8509

Backport ClickHouse#108509 to 25.8: Match http_forbid_headers case-insensitively
The new auth_header validation rejects values not in 'HeaderName: HeaderValue'
format. test_database_hms/test.py exists only on 25.8 (not master), so the
original PR never updated its test_hide_sensitive_info, leaving it with an
invalid auth_header. Apply the same fix as the other catalog test files.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…9389

Backport ClickHouse#109389 to 25.8: Fix TSan data race in uniqExact two-level parallel merge
…4822

Backport ClickHouse#104822 to 25.8: Fix race between ALTER RENAME COLUMN and merge causing data loss (ClickHouse#80648)
`used_privileges` (and `missing_privileges`) rows in `system.query_log`
could contain privilege strings from completely unrelated earlier queries
of a different user, database, and session that had finished much earlier.

`Context::makeQueryContext` seeded the new query's `QueryPrivilegesInfo`
by copying the contents of the parent context's object:

    query_privileges_info = std::make_shared<QueryPrivilegesInfo>(*query_privileges_info);

The parent is the session (or global) context. Session contexts are
created via `createCopy(global_context)` and never call `makeQueryContext`,
so the session and global contexts share a single `QueryPrivilegesInfo`
object. Any privilege string that ever landed in that shared object — and
partial state observed when the copy raced a concurrent writer — leaked
into the `used_privileges` of unrelated later queries. The one-directional
spread and the 1-2 partial entries per polluted row match a copy-vs-write
race against this shared object.

A new query has checked no privileges yet, so there is nothing legitimate
to inherit. Seed every query with an empty `QueryPrivilegesInfo`. Child
contexts created via `createCopy` still share the query's object, so
sub-operations correctly contribute to the same query's `used_privileges`.

Added a deterministic unit test `MakeQueryContextDoesNotInheritPrivileges`
that pollutes a parent context's privileges, derives a query context, and
asserts the query starts clean and that its checks do not bleed back into
the parent.

Closes: ClickHouse#105983

CI report:
https://s3.amazonaws.com/clickhouse-test-reports/json.html?REF=master&sha=fa6d98d95368955ee5619a28a21527da7a9b83cb&name_0=MasterCI&name_1=Stateless%20tests%20%28amd_asan_ubsan%2C%20distributed%20plan%2C%20parallel%2C%202%2F2%29

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 3a3c454)

# Conflicts:
#	src/Interpreters/tests/gtest_context_race.cpp
…8508

Backport ClickHouse#108508 to 25.8: Enforce access control for MySQL COM_FIELD_LIST and COM_INIT_DB
Backport ClickHouse#98827 to 25.8: Implement http header validation for DataLakeCatalog
…0529

Backport ClickHouse#100529 to 25.8: Fix: fix Credential leak in query_log for paimon*Cluster and deltaLakeS3 t…
…7675

Backport ClickHouse#107675 to 25.8: fix column order for distributed alias columns
…9874

Backport ClickHouse#109874 to 25.8: Bump libarchive from 3.8.7 to 3.8.8
alexey-milovidov and others added 13 commits August 8, 2026 16:13
Backport ClickHouse#88573 to 25.8: test: fix flakiness of test_async_load_databases (pushing to MV reordered and lack of proper cleanup)
…3224

Backport ClickHouse#113224 to 25.8: Do not read the internal database of temporary tables in `Merge`
…9675

Backport ClickHouse#109675 to 25.8: Fix segfault due to bad shutdown ordering on startup exception
Fixes 10 CVEs from the curl 8.21.0 security disclosure that apply
to our build (connection reuse, cookie handling, proxy/Digest auth,
mTLS matching, WebSocket support). Updated curl-cmake/CMakeLists.txt
for curl 8.21.0's source layout: lib/noproxy.c was removed upstream
(logic moved into new lib/proxy.c); also added cf-recvbuf.c,
cf-setup.c, creds.c, peer.c, and vtls/vtls_config.c.

Verified: ninja _curl builds and links clean.
…2601

Backport ClickHouse#112601 to 25.8: Iterate ColumnObject subcolumns in sorted path order
…2784

Backport ClickHouse#112784 to 25.8: Fix startup and ATTACH of a view with a recursive CTE with the old analyzer
…3390

Backport ClickHouse#113390 to 25.8: Fix ATTACH of Kafka tables with a large kafka_num_consumers
Release v25.8.30.16-lts

# Conflicts:
#	.gitmodules
#	cmake/autogenerated_versions.txt
#	src/Access/AuthenticationData.cpp
#	src/Interpreters/Context.cpp
#	src/Interpreters/Context.h
#	src/Parsers/FunctionSecretArgumentsFinder.h
#	src/Storages/ObjectStorage/DataLakes/Iceberg/StatelessMetadataFileGetter.cpp
#	src/Storages/ObjectStorageQueue/ObjectStorageQueueIFileMetadata.cpp
#	src/Storages/StorageMergeTree.cpp
#	tests/integration/test_database_iceberg/test.py
#	tests/integration/test_mask_sensitive_info/test.py
#	tests/integration/test_storage_iceberg/test.py
@github-actions

github-actions Bot commented Aug 17, 2026

Copy link
Copy Markdown

Workflow [PR], commit [b7d4012]

$CLICKHOUSE_CLIENT already carries --send_logs_level from shell_config.sh,
so passing it again makes the client fail with
"option '--send_logs_level' cannot be specified more than once".
Runs without settings randomization (Fast test) do not add
--allow_repeated_settings, so add it explicitly in the test.
@zvonand

zvonand commented Aug 18, 2026

Copy link
Copy Markdown
Member Author

@blau-ai

@blau-ai

blau-ai commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

CI triage for #2224 (bump to 25.8.30)

Verdict: 8 red checks, none is a product regression introduced by this bump.
1 infra, 1 expected-for-bump (DCO), 1 pre-existing crash unrelated to the diff, and 4 stateless failures that are all new tests brought in by the bump failing in one specific CI config each (test-harness tagging), plus one deltalake test that needs a look but shows no security regression. Head SHA e3297834526.

Evidence: this PR is only 2 commits past antalya-25.8; the "product" surface is the merge of the v25.8.30.16-lts tag. All four failing stateless tests were added by that merge (none exist on the base branch), and every one of them passes in every other config and fails in exactly the config a standard exclusion tag would remove.


Not caused by this PR

Integration tests (amd_binary, 1/5 … 5/5) — all five shards report infrastructure error with no test-level results (only a job.log, no test artifacts). Runner/infra failure, not a product failure. → Re-run.

DCO — fails because the merge commit Merge tag 'v25.8.30.16-lts' and the upstream backport commits carry no Signed-off-by trailer. This is inherent to a version-bump PR that merges upstream history. → Maintainer bypass / override, as for previous bump PRs. Not a code issue.

AST fuzzer (amd_debug)Logical error: 'Bad cast from type ColumnVector<unsigned long> to ColumnVector<char8_t>'. This is a real but pre-existing crash, not introduced here:

  • Crash site: src/Processors/Formats/Impl/Parquet/Reader.cpp:2125 in Parquet::Reader::applyPrewhere — a typeid_cast<ColumnVector<UInt8>> on a ColumnVector<UInt64> column, i.e. a fuzzed PREWHERE cityHash64(...) (UInt64) fed to the native Parquet reader v3 (input_format_parquet_use_native_reader_v3=1).
  • This bump makes zero changes under src/Processors/Formats/Impl/Parquet/ (git diff antalya-25.8..HEAD -- .../Parquet/ is empty), and applyPrewhere already exists on antalya-25.8. The bug lives on the base branch.
  • → Not a blocker for this PR. Worth a separate issue against the native Parquet v3 reader (PREWHERE filter column must be cast to UInt8, not blindly to the column's own type). Safe to re-run the fuzzer here.

Introduced by the bump, but test-only / low-risk (owned by this PR)

All four are brand-new tests that came in with the tag merge. Three are missing a CI-config exclusion tag; one is a security test whose security invariant still holds.

1. 04299_deltalake_local_path_traversal — fails in all 6 stateless configs (deterministic).
Diff: the expected GOT ACCESS DENIED ERROR line is missing for both allow_experimental_delta_kernel_rs=1 and =0; but NO LEAK holds in every config — the crafted path-traversal delta log does not leak the out-of-table secret. So there is no security regression; only the specific PATH_ACCESS_DENIED error the test asserts is not being raised.
The guard (resolvePathInsideTable, backport ClickHouse#106115) is present and wired into both readers (DeltaLakeMetadata.cpp, DeltaLake/TableSnapshot.cpp), so this is most likely a path-normalization detail in the CI temp layout (e.g. pathStartsWith on the non-normalized base/../secret combination, or CLICKHOUSE_TMP under a symlinked path) rather than a missing check.
Needs a real look by the delta-lake owner (or the bump author): reproduce deltaLakeLocal(<crafted dir>, 'RawBLOB') and capture the actual error, then either fix the guard so PATH_ACCESS_DENIED is raised, or relax the test to assert "read is blocked" rather than the exact code. Not a merge blocker on security grounds, but must go green.

2. 03918_arrayjoin_join_on_duplicate_execution — fails only under old analyzer.
The old analyzer rejects arrayJoin(...) in a JOIN ON key with INVALID_JOIN_ON_EXPRESSION; the test is a regression test for a new-analyzer plan optimization (query_plan_use_new_logical_join_step) and passes under the new analyzer. → Tag it no-old-analyzer (that tag is already used by 04330_join_global_left_semi_chunk_consistency.sql).

--- Tags: long, no-random-settings
+-- Tags: long, no-random-settings, no-old-analyzer

3. 04510_s3_explicit_url_named_secret_mask — fails only under DatabaseReplicated.
Masking works ([HIDDEN] present); the reference mismatch is the extra replicated-DDL lines DatabaseReplicated injects into the SHOW CREATE stream (CREATE TABLE … UUID '…' and /* ddl_entry=… */ DROP TABLE … SYNC). → Tag no-replicated-database.

--- Tags: no-fasttest
+-- Tags: no-fasttest, no-replicated-database

4. 04296_alter_rename_column_in_memory_rollback — fails only under DatabaseReplicated (sequential).
The test enables the mt_alter_throw_in_start_mutation failpoint, which is specific to StorageMergeTree::alter. Under DatabaseReplicated the MergeTree table becomes ReplicatedMergeTree, whose ALTER path differs, so the in-memory rollback the test checks isn't exercised as intended (→ SELECT id, d hits UNKNOWN_IDENTIFIER: d). It passes in every non-replicated sequential config. → Tag no-replicated-database.

-# Tags: no-parallel
+# Tags: no-parallel, no-replicated-database

(One caveat worth a maintainer glance: confirm the ALTER-rename rollback semantics are equivalent — or intentionally out of scope — under a Replicated engine, so the tag documents a real scope boundary rather than hiding a Replicated-path gap.)


Suggested next steps

  • Re-run the 5 Integration (amd_binary) shards and the AST fuzzer (both non-PR).
  • DCO: maintainer override, as usual for bump PRs.
  • File a separate issue for the pre-existing native-Parquet-v3 PREWHERE bad-cast crash.
  • Tag fixes for 03918, 04510, 04296 (three one-line diffs above) — these will clear those three stateless suites.
  • 04299_deltalake: hand to the delta-lake owner to confirm why PATH_ACCESS_DENIED isn't raised (no leak, so low severity).

I can open a blau/* PR with the three tagging one-liners against this branch if you'd like — just say the word (or tell me to commit them directly to bump/antalya-25.8/25.8.30). I'd leave 04299 and the Parquet-v3 crash for their code owners.

The upstream test reads the table through the deltaLakeLocal table function, which
the Antalya fork does not register: data-lake table functions come from
TableFunctionObjectStorageClusterFallback, and only icebergLocal has a *Local
definition there (registerTableFunctionIceberg, which upstream uses for these, is
dead code on this branch). So the query failed with UNKNOWN_FUNCTION before the
path-containment check was reached, and the test observed neither
PATH_ACCESS_DENIED nor the secret. The same test on stable-25.8 only needed
--allow_local_data_lakes=1, since deltaLakeLocal is registered there.

The DeltaLakeLocal table engine does exist here, behind the same
allow_local_data_lakes guard, and both readers resolve add paths through the same
resolvePathInsideTable() in DeltaLakeMetadata.cpp and DeltaLake/TableSnapshot.cpp,
so the table is created with the engine instead of the table function and
--allow_local_data_lakes=1 is passed to lift the Altinity guard. The reference file
is unchanged.

Verified with the build_amd_binary artifact of this PR head: output matches the
reference for both allow_experimental_delta_kernel_rs values, and a control run
with the target file legitimately inside the table directory still reads it on
both readers, so the NO LEAK assertion is not vacuous.
@zvonand

zvonand commented Aug 21, 2026

Copy link
Copy Markdown
Member Author

@blau-ai

@blau-ai

blau-ai commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

CI triage for #2224 (bump to 25.8.30)

Summary — 7 red checks: 4 are PR-caused (all with clear fixes), 1 pre-existing/flaky, 2 are not code (policy / base-image CVE).

Check Failing item Verdict
Integration tests (amd_binary, 2/5) test_database_iceberg_nessie_catalog::test_hide_sensitive_info PR-caused (real)
Stateless (old analyzer, s3, DatabaseReplicated, seq) 04296_alter_rename_column_in_memory_rollback PR-caused (dropped tag)
Stateless (old analyzer, s3, DatabaseReplicated, par) 04510_s3_explicit_url_named_secret_mask PR-caused (missing tag)
Stateless (old analyzer, s3, DatabaseReplicated, par) 03918_arrayjoin_join_on_duplicate_execution PR-caused (missing tag)
Stateless (DatabaseReplicated par) + (amd_debug, par) 03749_cross_join_use_nulls_matcher pre-existing / flaky
DCO commits missing Signed-off-by not code (policy)
Grype Scan (-alpine) CVE-2026-14456, CVE-2025-60876 (High) not code (base image)

All builds, fast test, stress, AST fuzzer, BuzzHouse, every regression suite, and the non-alpine Grype scans are green.


1. test_hide_sensitive_info — PR-caused, real ⚠️

This is the one genuine incompatibility. The bump backports upstream ClickHouse#98827 ("Implement http header validation for DataLakeCatalog", commit b28b0641164), which adds auth_header format validation in src/Databases/DataLake/DatabaseDataLake.cpp:

Code: 36. DB::Exception: Invalid auth header format. Expected 'HeaderName: HeaderValue'. (BAD_ARGUMENTS)
(query: CREATE DATABASE demo ENGINE = DataLakeCatalog(...) SETTINGS ... auth_header='SECRET_2')

Upstream ClickHouse#98827 changed the .cpp and updated the three DataLake integration tests to use a valid header. The backport carried only the .cpp change — the test update was dropped — so the pre-existing Altinity test still passes auth_header="SECRET_2" (no colon), which the new validation now rejects.

Fix (mirrors upstream ClickHouse#98827) — tests/integration/test_database_iceberg_nessie_catalog/test.py:299:

-        additional_settings={"auth_header": "SECRET_2"},
+        additional_settings={"auth_header": "Authorization: SECRET_2"},

The masking assertion assert "SECRET_2" not in show_result still holds. Upstream also added a test_invalid_auth_header_format case; optional to backport too.

2. 04296_alter_rename_column_in_memory_rollback — PR-caused, dropped tag

New test added by this bump. It uses a failpoint in StorageMergeTree::alter and expects the in-memory rename to roll back; under DatabaseReplicated the ALTER takes a different path and the column is actually renamed → Code: 47 ... Missing columns: 'd'. Upstream tags this no-parallel, no-replicated-database; the backport kept only no-parallel.

Fixtests/queries/0_stateless/04296_alter_rename_column_in_memory_rollback.sh:2:

-# Tags: no-parallel
+# Tags: no-parallel, no-replicated-database

3. 04510_s3_explicit_url_named_secret_mask — PR-caused, missing tag

New test added by this bump. Secret masking itself works (every secret shows [HIDDEN]); the diff is only extra rows the test picks up from system.query_log under DatabaseReplicated — the internal replicated DDL (CREATE TABLE default.t_04510 UUID '…', /* ddl_entry=… */ DROP TABLE … SYNC). The final SELECT query FROM system.query_log isn't written for that mode.

Fixtests/queries/0_stateless/04510_s3_explicit_url_named_secret_mask.sql:1:

--- Tags: no-fasttest
+-- Tags: no-fasttest, no-replicated-database

4. 03918_arrayjoin_join_on_duplicate_execution — PR-caused, missing tag

New test added by this bump. It exercises arrayJoin() in JOIN ON with the new-analyzer feature query_plan_use_new_logical_join_step. In the old-analyzer suite that path is rejected before it matters → Code: 403 ... Not allowed function in JOIN ON ... (INVALID_JOIN_ON_EXPRESSION). It passes in every new-analyzer suite. Upstream doesn't run this under old analyzer; the antalya matrix does, so it needs the guard.

Fixtests/queries/0_stateless/03918_arrayjoin_join_on_duplicate_execution.sql:1:

--- Tags: long, no-random-settings
+-- Tags: long, no-random-settings, no-old-analyzer

5. 03749_cross_join_use_nulls_matcher — pre-existing / flaky (not PR-caused)

Present on antalya-25.8 and not touched by this PR. The diff is a pure row-reordering (same rows, different order) — the query has no ORDER BY:

SELECT concat(*) FROM numbers(2) AS n1, numbers(3) AS n2
RIGHT JOIN numbers(4) AS n3 ON n2.number = n3.number SETTINGS join_use_nulls = true;

Order-nondeterministic → flaky under parallel/random settings. Safe to re-run. A proper fix (add a deterministic ORDER BY) belongs in its own change, not this bump.

6. DCO — not code (policy)

Fails because backported/upstream commits (robot-clickhouse and upstream authors) carry no Signed-off-by. Expected for a release-bump PR; resolved by a maintainer DCO override, not a code change.

7. Grype Scan -alpine — not code (base image)

1 High finding on the alpine image only (CVE-2026-14456, CVE-2025-60876, matched via nvd:cpe); the regular server and keeper images scan clean (0 high/critical). These are Alpine base-package CVEs independent of this PR's code — a security-team/base-image triage, not a bump blocker.


Proposed action

Items 1–4 are the real work and are small, well-scoped, evidence-backed edits (three tag lines + one one-line test-value change). I have not pushed anything. Want me to:

  • (a) open a separate PR from a blau/* branch with fixes 1–4, or
  • (b) commit them directly to bump/antalya-25.8/25.8.30?

Say which and I'll deliver. (03749 / DCO / Grype are out of scope of these code fixes as noted.)

I can't build or run ClickHouse in this container — the above is from CI's praktika reports and the diff; correctness of the fixes would be confirmed by CI on delivery.

@zvonand

zvonand commented Aug 21, 2026

Copy link
Copy Markdown
Member Author

@blau-ai fix test_hide_sensitive_info and stateless fails related to this PR

@blau-ai

blau-ai commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Triage + fix for test_hide_sensitive_info and the stateless failures

Hi @zvonand — I dug into the failing checks on 04f6f26 (evidence from the praktika S3 reports). All five failures are test-side issues surfaced by the 25.8.30 bump — none is a server-code regression. No source or .reference changes are needed. Fixes are staged in my worktree; see the diff at the bottom.

1. Integration — test_database_iceberg_nessie_catalog/test.py::test_hide_sensitive_info (amd_binary 2/5)

Not a masking failure — the query is now rejected before masking runs:

Code: 36. DB::Exception: Invalid auth header format. Expected 'HeaderName: HeaderValue'. (BAD_ARGUMENTS)
(query: CREATE DATABASE demo ENGINE = DataLakeCatalog(...) SETTINGS ...,auth_header='SECRET_2')

The bump pulled in b28b0641164 ("Backport ClickHouse#98827 … Implement http header validation for DataLakeCatalog", via the v25.8.30.16-lts tag), which adds auth_header format validation in src/Databases/DataLake/DatabaseDataLake.cpp:741-756 (rejects a value with no :). That same commit updated the sibling tests (test_database_iceberg, test_database_iceberg_lakekeeper_catalog, test_database_hms) to the valid "Authorization: SECRET_2" form, but the Altinity-only nessie test (which doesn't exist upstream) was missed and kept the bare "SECRET_2".
Fix: use the valid header form (matches test_database_iceberg/test.py:389). Masking assertions still hold — the value after : renders as [HIDDEN].

2. Stateless — amd_binary, old analyzer, s3 storage, DatabaseReplicated (parallel) — 3 failed, 2 broken

(The 2 "broken" are pre-existing broken-list entries, not new failures.)

  • 04510_s3_explicit_url_named_secret_mask — reference mismatch. Under a Replicated database the final system.query_log scan picks up the engine's internal DDL rows (/* ddl_entry=… */ …), which aren't in the .reference (generated under Atomic). Masking itself is correct. → add no-replicated-database.
  • 03918_arrayjoin_join_on_duplicate_executionCode: 403 … Not allowed function in JOIN ON … arrayJoin(...) (INVALID_JOIN_ON_EXPRESSION). The old analyzer rejects arrayJoin() in JOIN ON; the test targets an analyzer-only optimization. → add no-old-analyzer (same convention as 04330_join_global_left_semi_chunk_consistency.sql).
  • 03749_cross_join_use_nulls_matcher — see §4 (also fails in suite §3).

3. Stateless — amd_debug (parallel) — 1 failed

  • 03749_cross_join_use_nulls_matcher — see §4.

4. Stateless — amd_binary, old analyzer, s3 storage, DatabaseReplicated (sequential) — 1 failed

  • 04296_alter_rename_column_in_memory_rollbackCode: 47 … Missing columns: 'd' (UNKNOWN_IDENTIFIER). This is by design of the fix under test: src/Storages/StorageMergeTree.cpp branches on hasReplicationThread(); under a Replicated DB the metadata is already committed to ZooKeeper and can't be rolled back, so it converges to the new schema. The test asserts the non-replicated (rollback) behavior. → add no-replicated-database.

03749_cross_join_use_nulls_matcher (fails in §2 and §3)

Nondeterministic row order — the single query has no ORDER BY, so RIGHT JOIN output order shifts with join settings. Same rows, different order. It's a pre-existing under-specified test (present on antalya-25.8). → add ORDER BY 1; with default ASC NULLS LAST this reproduces the existing .reference exactly, so no .reference change.


Proposed diff (test-only)

diff --git a/tests/integration/test_database_iceberg_nessie_catalog/test.py b/tests/integration/test_database_iceberg_nessie_catalog/test.py
--- a/tests/integration/test_database_iceberg_nessie_catalog/test.py
+++ b/tests/integration/test_database_iceberg_nessie_catalog/test.py
@@ def test_hide_sensitive_info(started_cluster):
         create_clickhouse_iceberg_database(
             started_cluster,
             node,
             CATALOG_NAME,
-            additional_settings={"auth_header": "SECRET_2"},
+            additional_settings={"auth_header": "Authorization: SECRET_2"},
         )

diff --git a/tests/queries/0_stateless/04510_s3_explicit_url_named_secret_mask.sql b/tests/queries/0_stateless/04510_s3_explicit_url_named_secret_mask.sql
--- a/tests/queries/0_stateless/04510_s3_explicit_url_named_secret_mask.sql
+++ b/tests/queries/0_stateless/04510_s3_explicit_url_named_secret_mask.sql
-- Tags: no-fasttest
+-- Tags: no-fasttest, no-replicated-database

diff --git a/tests/queries/0_stateless/03918_arrayjoin_join_on_duplicate_execution.sql b/tests/queries/0_stateless/03918_arrayjoin_join_on_duplicate_execution.sql
--- a/tests/queries/0_stateless/03918_arrayjoin_join_on_duplicate_execution.sql
+++ b/tests/queries/0_stateless/03918_arrayjoin_join_on_duplicate_execution.sql
-- Tags: long, no-random-settings
+-- Tags: long, no-random-settings, no-old-analyzer

diff --git a/tests/queries/0_stateless/04296_alter_rename_column_in_memory_rollback.sh b/tests/queries/0_stateless/04296_alter_rename_column_in_memory_rollback.sh
--- a/tests/queries/0_stateless/04296_alter_rename_column_in_memory_rollback.sh
+++ b/tests/queries/0_stateless/04296_alter_rename_column_in_memory_rollback.sh
# Tags: no-parallel
+# Tags: no-parallel, no-replicated-database

diff --git a/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql b/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql
--- a/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql
+++ b/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql
 RIGHT JOIN numbers(4) AS n3
     ON n2.number = n3.number
+ORDER BY 1
 SETTINGS join_use_nulls = true;

How do you want this delivered? I haven't pushed anything. Reply:

  • @blau-ai commit to this branch — I'll commit these to bump/antalya-25.8/25.8.30 directly, or
  • @blau-ai open a PR — I'll open a separate blau/* PR against antalya-25.8.

Correctness is validated by CI once pushed (I can't build/run ClickHouse in this container). Notes: the no-old-analyzer / no-replicated-database tags make the affected tests skip in the incompatible suite configurations (standard ClickHouse practice), and the ORDER BY 1 addition just makes an existing test deterministic. The Grype/DCO reds are unrelated to test correctness.

@zvonand

zvonand commented Aug 21, 2026

Copy link
Copy Markdown
Member Author

@blau-ai commit to this branch

Test-only fixes for the failures on this PR (no server-code changes):

- test_database_iceberg_nessie_catalog: use valid 'Authorization: SECRET_2'
  auth_header form now required by DataLakeCatalog http header validation
  (b28b064). Matches the sibling iceberg tests.
- 04510_s3_explicit_url_named_secret_mask: no-replicated-database (internal
  DDL rows leak into query_log under a Replicated database).
- 03918_arrayjoin_join_on_duplicate_execution: no-old-analyzer (old analyzer
  rejects arrayJoin() in JOIN ON; test targets analyzer-only optimization).
- 04296_alter_rename_column_in_memory_rollback: no-replicated-database
  (rollback path does not apply under a Replicated DB by design).
- 03749_cross_join_use_nulls_matcher: add ORDER BY 1 to make RIGHT JOIN
  output order deterministic (reference unchanged).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@blau-ai

blau-ai commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Committed to bump/antalya-25.8/25.8.30

Done, @zvonand — pushed the test-only fixes directly to this branch as b7d40128152 (on top of 04f6f265a75).

 tests/integration/test_database_iceberg_nessie_catalog/test.py          | 2 +-
 tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql        | 1 +
 tests/queries/0_stateless/03918_arrayjoin_join_on_duplicate_execution.sql | 2 +-
 tests/queries/0_stateless/04296_alter_rename_column_in_memory_rollback.sh | 2 +-
 tests/queries/0_stateless/04510_s3_explicit_url_named_secret_mask.sql   | 2 +-
 5 files changed, 5 insertions(+), 4 deletions(-)

Contents are exactly the diff proposed above — no server-code or .reference changes:

  1. test_hide_sensitive_infoauth_header now uses the valid "Authorization: SECRET_2" form required by the new DataLakeCatalog header validation.
  2. 04510_s3_explicit_url_named_secret_maskno-replicated-database.
  3. 03918_arrayjoin_join_on_duplicate_executionno-old-analyzer.
  4. 04296_alter_rename_column_in_memory_rollbackno-replicated-database.
  5. 03749_cross_join_use_nulls_matcherORDER BY 1 for deterministic output.

CI will now re-run on the new head and confirm correctness (I can't build/run ClickHouse in this container). The Grype/DCO reds remain unrelated to test correctness, as noted earlier.

@zvonand zvonand mentioned this pull request Aug 21, 2026
28 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.