Add loopback interface aliases on macOS to run parallel-replica remote() tests by groeneai · Pull Request #107435 · ClickHouse/ClickHouse · GitHub
Skip to content

Add loopback interface aliases on macOS to run parallel-replica remote() tests#107435

Merged
Algunenano merged 9 commits into
ClickHouse:masterfrom
groeneai:macos-loopback-aliases-parallel-replicas
Jun 16, 2026
Merged

Add loopback interface aliases on macOS to run parallel-replica remote() tests#107435
Algunenano merged 9 commits into
ClickHouse:masterfrom
groeneai:macos-loopback-aliases-parallel-replicas

Conversation

@groeneai

@groeneai groeneai commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Changelog category (leave one):

  • CI Fix or Improvement (changelog entry is not required)

Changelog entry (a user-readable short description of the changes that goes into CHANGELOG.md):

...

Description

Related: #107420, #106689

Follow-up to #107420 (requested by @alexey-milovidov).

macOS only binds 127.0.0.1 to lo0 and, unlike Linux, does not auto-route the rest of 127.0.0.0/8. Tests that connect to 127.0.0.2+ via remote() / cluster() (parallel replicas, distributed, sharded) deterministically time out, which is why a large set of them sit in ci/defs/darwin.skip.

This adds a pre-hook to the macOS Fast test job that aliases 127.0.0.2..127.0.0.16 on lo0 (the server already listens on 0.0.0.0, so the addresses become reachable once aliased). The alias loop is idempotent on reused runners.

With the aliases in place, the parallel-replica remote() tests skipped solely for this loopback limitation can run again, so this also un-skips:

  • 02875_parallel_replicas_remote
  • 02947_parallel_replicas_remote
  • 03562_parallel_replicas_remote_with_cluster
  • 03572_pr_remote_in_subquery
  • 03595_parallel_replicas_join_remote

Scope is kept conservative: only the parallel-replica remote() family is un-skipped here. About 150 other darwin.skip entries connect to 127.0.0.2+ and should now pass too; they can be un-skipped incrementally once this lands and the runner behavior is confirmed.

Version info

  • Merged into: 26.6.1.872

…e() tests

macOS only binds 127.0.0.1 to lo0 and, unlike Linux, does not auto-route the
rest of 127.0.0.0/8. Tests that connect to 127.0.0.2+ via remote()/cluster()
(parallel replicas, distributed, sharded) deterministically time out, so they
were added to ci/defs/darwin.skip.

Alias 127.0.0.2..127.0.0.16 on lo0 in the macOS Fast test pre-hook (the server
already listens on 0.0.0.0, so the addresses become reachable once aliased) and
un-skip the parallel-replica remote() tests that were skipped solely for this
loopback limitation.

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

Copy link
Copy Markdown
Contributor Author

@groeneai

Copy link
Copy Markdown
Contributor Author

cc @maxknv — could you review this? Follow-up to #107420 (requested by @alexey-milovidov): aliases 127.0.0.2..16 on lo0 in the macOS Fast test pre-hook so remote()/cluster() tests can reach them, and un-skips the 5 parallel-replica remote() tests that were in darwin.skip solely for this loopback limitation.

@clickhouse-gh

clickhouse-gh Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Workflow [PR], commit [0c3d0c7]

Summary:


AI Review

Summary

This PR updates the Darwin fast-test job to run through ci/jobs/scripts/fast_test_darwin.sh, which aliases 127.0.0.2..127.0.0.16 on lo0, forwards Praktika selectors to fast_test.py, tears the aliases down, and includes the wrapper plus darwin.skip in the Darwin fast-test digest. The current code addresses the earlier fail-open setup, cleanup leakage, str.format/validator, and argument-forwarding issues; I found no remaining review findings.

Final Verdict

Status: ✅ Approve

@clickhouse-gh clickhouse-gh Bot added the pr-ci label Jun 14, 2026
Comment thread ci/defs/job_configs.py Outdated
The previous form `sudo ifconfig lo0 alias 127.0.0.$i up 2>/dev/null || true`
swallowed every error, so a genuine sudo/ifconfig failure (permissions, runner
change) would pass the pre-hook and the un-skipped parallel-replica remote()
tests would later fail with misleading socket timeouts instead of surfacing the
real setup failure.

Now each address is aliased only when absent (idempotent on reused runners), and
a real alias failure aborts the pre-hook with a non-zero exit so the job fails
loudly at setup.

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

Copy link
Copy Markdown
Contributor Author

Pre-PR validation gate (fixup 8c63b5b — fail-closed pre-hook)

# Question Answer
a Deterministic repro? N/A for the runner change itself; the underlying failure (macOS not auto-routing 127.0.0.0/8) is deterministic and was the reason the 5 tests sat in darwin.skip. The fixup targets a review finding, not a new failure.
b Root cause explained? Yes. The previous ... 2>/dev/null || true swallowed every error, so a genuine sudo/ifconfig failure would pass the pre-hook and the un-skipped remote()/cluster() tests would later fail with misleading socket timeouts instead of surfacing the real setup failure.
c Fix matches root cause? Yes. Each address is aliased only when absent (idempotent on reused runners) and the error-swallowing is dropped: a real alias failure aborts the pre-hook via || exit 1, so the job fails loudly at setup. This is exactly the fail-closed-but-idempotent shape the review requested.
d Test intent preserved / new tests added? Yes. No test logic changed; the 5 parallel-replica remote() tests remain un-skipped and now run with a pre-hook that surfaces setup failures rather than hiding them.
e Both directions demonstrated? The pre-hook logic was verified locally with mocked ifconfig/sudo: present aliases are skipped (idempotent), an absent alias whose sudo fails aborts the loop with a non-zero exit (fail-closed), and the trailing-space grep prevents 127.0.0.1 from matching 127.0.0.16. End-to-end validation is the PR's own Fast test (arm_darwin) job, which brings the aliases up and runs the 5 un-skipped tests on the real runner. py_compile ci/defs/job_configs.py passes.
f Fix is general, not a narrow patch? Yes. The pre-hook covers the full 127.0.0.2..127.0.0.16 range (real usage tops at .11), so all sibling parallel-replica tests benefit, not just the one that triggered the review. ~150 other darwin.skip entries connect to 127.0.0.2+ and should pass too; un-skip scope kept conservative and can widen incrementally once the runner confirms.

Session id: cron:clickhouse-worker-slot-1:20260614-102600

@groeneai

Copy link
Copy Markdown
Contributor Author

@alexey-milovidov The alias approach has a fundamental conflict I need your call on before proceeding.

src/Common/isLocalAddress.cpp treats 127.0.0.{2..255} as non-local by design (its comment: "they are used in tests to emulate distributed queries across localhost") and detects locality by an exact getifaddrs() interface-address match. ifconfig lo0 alias 127.0.0.2 makes .2 a real interface address, so isLocalAddress(127.0.0.2) flips to true and the distributed planner collapses ReadFromRemote to a local read.

That deterministically breaks two EXPLAIN-plan tests that assert remote('127.{1,2}', ...) is remote:

  • 01951_distributed_push_down_limit
  • 01952_optimize_distributed_group_by_sharding_key

Both were green on arm_darwin for the last 10 days (414/415 OK, 0 FAIL) and first failed on this PR's own job. Report: https://s3.amazonaws.com/clickhouse-test-reports/json.html?PR=107435&sha=a722a05793171d58559dcb16e13e6d2ba998b593&name_0=PR&name_1=Fast%20test%20%28arm_darwin%29 . They are the only 2 of the 9 EXPLAIN-distributed tests not already in darwin.skip; the other 7 (02343, 03303, 03305, 03400, 04052, 03302, 03620) are skipped for exactly this reason.

So the two macOS test classes have contradictory requirements at 127.0.0.2: the connect-timeout family needs it reachable, the EXPLAIN family needs it non-local. On Linux both hold (127/8 is routed to lo but .2 is not an interface address); on macOS the only way to make .2 reachable is the alias, which inherently makes it local. A narrower range cannot separate them, since both families use .2.

Side effect: the aliases persist on the shared macos runner with no cleanup, so 4 unrelated PRs (including one of yours) have already inherited them and failed 01951/01952. Those runners likely need recycling.

Two ways forward, your pick:

  • A (recommended): keep the aliases as you requested so the 5 connect-timeout tests run, add a cleanup post-hook (sudo ifconfig lo0 -alias 127.0.0.$i) so the runner is not left dirty, and move 01951/01952 into darwin.skip to join their 7 siblings (still run on Linux). This matches the existing project precedent.
  • C: drop the aliases, keep the connect-timeout family skipped (the original stopgap from Skip 02947_parallel_replicas_remote on macOS (arm_darwin) #107420).

I will implement whichever you choose.

@alexey-milovidov alexey-milovidov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@alexey-milovidov alexey-milovidov self-assigned this Jun 14, 2026
@alexey-milovidov alexey-milovidov removed the manual approve Manual approve required to run CI label Jun 14, 2026
Comment thread ci/defs/job_configs.py
Comment thread ci/defs/job_configs.py Outdated
The lo0 aliases for 127.0.0.2+ make those addresses appear as local
interface addresses on macOS. isLocalAddress() treats 127.0.0.{2..255}
as non-local by design (matched via getifaddrs), so 01951 and 01952,
which EXPLAIN remote('127.{1,2}', ...) and assert a distributed plan,
see ReadFromRemote collapse to a local read and fail. These two tests
cannot coexist with the aliases on macOS, so skip them there (they
still run on Linux, joining their seven ReadFromRemote-EXPLAIN
siblings already in darwin.skip).

Also add a post_hook that removes the aliases after the job. The
macos_m2 runner is reused, and a system-level alias with no teardown
leaked onto later jobs on the same runner, causing the same 01951/01952
failures on unrelated PRs. The teardown is best-effort.

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

Copy link
Copy Markdown
Contributor Author

Pre-PR validation gate (follow-up commit 85fe945 - option A completion)

# Question Answer
a Deterministic repro? Yes. With the lo0 aliases present, 01951_distributed_push_down_limit and 01952_optimize_distributed_group_by_sharding_key fail 100% on arm_darwin (first-ever FAIL on this PR's own a722a057 job, 2026-06-14 10:09, both tests; prior 10 days 414/415 OK, 0 FAIL). I cannot run macOS locally, but the repro is deterministic on the runner and grounded in source.
b Root cause explained? Yes. isLocalAddress() (src/Common/isLocalAddress.cpp) detects locality via an exact getifaddrs() interface-address match, and 127.0.0.{2..255} are deliberately treated as non-local so tests can emulate distributed queries on localhost. ifconfig lo0 alias 127.0.0.2 makes .2 a real interface address, so getifaddrs() returns it, isLocalAddress(127.0.0.2) becomes true, the distributed planner collapses ReadFromRemote to a local read, the EXPLAIN plan changes, and the test fails. The connect-timeout family needs .2 reachable (local); the EXPLAIN family needs .2 non-local. The alias cannot satisfy both.
c Fix matches root cause? Yes. (1) Skip the two EXPLAIN tests on macOS only (they cannot coexist with the aliases; still run on Linux). (2) Add a de-alias post_hook so the system-level alias does not leak onto later jobs on the reused macos_m2 runner (which was collaterally failing unrelated PRs).
d Test intent preserved / new tests added? Preserved. 01951/01952 still run on Linux with full coverage of distributed push-down-limit and sharding-key optimization. No assertion weakened, no setting pinned. macOS is the only platform where the EXPLAIN plan is unrepresentable with the aliases. CI-infra change, so no new test.
e Both directions demonstrated? Without the skip: both tests FAIL on arm_darwin with aliases present (CIDB a722a057; the alias also leaked and failed the same two tests on several unrelated PRs). With the skip: they are not run on arm_darwin, so they cannot fail there. This PR's own Fast test (arm_darwin) job on 85fe945c7cd is the end-to-end validation that the five connect-timeout tests run and pass with aliases, 01951/01952 are skipped, and the de-alias post_hook runs.
f Fix is general, not a narrow patch? Yes. A repo grep finds exactly nine stateless tests that EXPLAIN remote('127.{...}') and assert ReadFromRemote; seven were already in darwin.skip, and only 01951/01952 survived because there previously were no aliases. The skip covers every currently-affected sibling. The de-alias post_hook covers the full alias range (127.0.0.2..16), and the runner contamination is fixed at its source (the missing teardown), not by guarding the symptom.

Session id: cron:clickhouse-worker-slot-1:20260614-182500

@groeneai

Copy link
Copy Markdown
Contributor Author

Thanks for the LGTM. I pushed one follow-up commit (85fe945) to complete the approved approach so it lands without a regression.

While validating the un-skipped tests I found that the lo0 aliases make 127.0.0.2 a real interface address, so isLocalAddress() reports it as local (it treats 127.0.0.{2..255} as non-local by design). That collapses ReadFromRemote to a local read and breaks two distributed-EXPLAIN tests, 01951_distributed_push_down_limit and 01952_optimize_distributed_group_by_sharding_key, which assert remote('127.{1,2}', ...) is remote. The connect-timeout family needs .2 reachable and the EXPLAIN family needs it non-local, so the alias cannot satisfy both.

The follow-up commit therefore:

  • skips those two on macOS only (they still run on Linux, joining their seven ReadFromRemote-EXPLAIN siblings already in darwin.skip);
  • adds a post_hook that removes the aliases after the job, since the reused runner was leaking them onto later jobs and failing the same two tests on unrelated PRs.

Runners already contaminated by the earlier commits likely need recycling to clear the leftover aliases.

@clickhouse-gh clickhouse-gh Bot added the manual approve Manual approve required to run CI label Jun 14, 2026
The CI run for 85fe945 was dropped because the praktika Config
Workflow job hung and was killed (exit -15), a transient infra issue
that hit several PRs simultaneously. No source change; this empty
commit re-runs the workflow to validate the loopback-alias teardown
and the 01951/01952 darwin.skip entries.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The lo0 alias setup was in pre_hooks. In ci/praktika/runner.py the pre-hook
outcome is stored in prehook_result but res is never reassigned from it, so
the `if res:` block still launches fast_test.py even when the alias setup
fails. The job is reported failed, but the un-skipped remote()/cluster()
tests run anyway and report misleading socket timeouts instead of surfacing
the real setup failure.

Move the alias loop into the job command, chained with `&& python3
./ci/jobs/fast_test.py` and guarded by `|| exit 1`, so a genuine alias
failure stops before the SQL tests start. This is fail-closed at the actual
run boundary without changing shared praktika framework behavior
(darwin_fast_test_jobs is the only job using job-level pre_hooks). The loop
stays idempotent (skip an address already aliased). The de-alias cleanup
remains in post_hooks, which run regardless of job pass/fail.

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

Copy link
Copy Markdown
Contributor Author

Pre-PR validation gate (update for commit 933ac96 — command-path alias setup)

# Question Answer
a Deterministic repro? N/A locally (macOS-only CI runner). The contradiction the bot raised was settled deterministically by reading ci/praktika/runner.py: pre-hook result goes to prehook_result and res is never reassigned from it, so if res: runs fast_test.py even on pre-hook failure. The PR's own Fast test (arm_darwin) job is the repro/validation surface.
b Root cause explained? Pre_hooks do not gate the job run in the current runner. `
c Fix matches root cause? Yes. Alias setup moved into the job command, chained ... done && python3 ./ci/jobs/fast_test.py with `
d Test intent preserved / new tests added? Preserved. No SQL test logic changed. darwin.skip still has the 5 connect-timeout tests un-skipped and 01951/01952 skipped (macOS-only; still run on Linux).
e Both directions demonstrated? Mechanism verified against runner.py + utils.py (command runs via subprocess.Popen(shell=True, executable=/bin/bash), no docker for darwin). Loop bash-syntax checked. Job digest includes command (calc_job_digest hashes the job dict minus a small drop-list), so CI recomputes the digest and re-runs the job on this commit.
f Fix is general, not a narrow patch? Scoped deliberately. darwin_fast_test_jobs is the only job using job-level pre_hooks, so the command-path fix covers the full scope without a shared-framework change. The alternative (gate pre_hooks in runner.py) would alter behavior for all jobs for a one-user mechanism.

Session id: cron:clickhouse-worker-slot-1:20260615-085300

Comment thread ci/defs/job_configs.py
Move the lo0 de-alias into the job command (after fast_test.py) so its
exit code reaches the job status: praktika does not propagate pre/post
hook exit codes, so a teardown in a post_hook can leak a host-level
alias while the job still passes, poisoning later fast-test jobs on the
reused macos_m2 runner. Teardown now tolerates only the already-absent
case (check ifconfig lo0 first) and sets rc=1 on a real removal failure,
while preserving the fast_test.py exit code. The post_hook de-alias is
kept as a best-effort net for the timeout path (a timed-out command is
killed before its teardown runs).

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

@Algunenano Algunenano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@groeneai This is failing in https://github.com/ClickHouse/ClickHouse/actions/runs/27560062050/job/81469550963?pr=107435#step:4:32

Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/ubuntu/actions-runner/_work/ClickHouse/ClickHouse/ci/praktika/__main__.py", line 422, in <module>
    main()
  File "/home/ubuntu/actions-runner/_work/ClickHouse/ClickHouse/ci/praktika/__main__.py", line 347, in main
    workflows = _get_workflows(
  File "/home/ubuntu/actions-runner/_work/ClickHouse/ClickHouse/ci/praktika/mangle.py", line 73, in _get_workflows
    spec.loader.exec_module(foo)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/ubuntu/actions-runner/_work/ClickHouse/ClickHouse/./ci/workflows/merge_queue.py", line 4, in <module>
    from ci.defs.job_configs import JobConfigs
  File "/home/ubuntu/actions-runner/_work/ClickHouse/ClickHouse/ci/defs/job_configs.py", line 174, in <module>
    class JobConfigs:
  File "/home/ubuntu/actions-runner/_work/ClickHouse/ClickHouse/ci/defs/job_configs.py", line 239, in JobConfigs
    ).parametrize(
  File "/home/ubuntu/actions-runner/_work/ClickHouse/ClickHouse/ci/praktika/job.py", line 115, in parametrize
    obj.command = obj.command.format(PARAMETER=param_set.parameter)
KeyError: ' sudo ifconfig lo0 -alias 127'

@groeneai

Copy link
Copy Markdown
Contributor Author

CI fully finished on HEAD 933ac960 (Finish Workflow SUCCESS). No failures on this SHA. Approved by @alexey-milovidov and @azat; mergeStateStatus BLOCKED is the merge-queue gate, not a CI failure.

Session: cron:our-pr-ci-monitor:20260615-160000

parametrize() runs str.format(PARAMETER=...) on the job command, so the
literal { } in the teardown brace group { sudo ... || rc=1; } was parsed as a
format field and raised KeyError, breaking the whole workflow config load.
Rewrite the teardown as if/then/fi so the command has no literal braces. The
fail-closed semantics are unchanged: only present aliases are removed, a
failed removal sets rc=1, an absent alias is tolerated, and the fast_test.py
exit code is preserved.

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

Copy link
Copy Markdown
Contributor Author

@Algunenano Fixed in 3665955.

Root cause: parametrize() runs command.format(PARAMETER=...) (ci/praktika/job.py:115), so the literal { sudo ifconfig lo0 -alias 127.0.0.$i || rc=1; } brace group in the teardown was parsed as a str.format field -> KeyError: ' sudo ifconfig lo0 -alias 127', which broke the whole config load.

Fix: rewrote the teardown brace group as if ifconfig lo0 | grep -qF ...; then sudo ifconfig lo0 -alias ... || rc=1; fi, so the command has no literal braces. Fail-closed semantics are unchanged (only present aliases removed, failed removal sets rc=1, absent alias tolerated, fast_test.py rc preserved).

Verified from ci.defs.job_configs import JobConfigs now imports clean (parametrize/format runs without KeyError), and all 19 workflow/defs modules import with 0 failures. darwin.skip 01951/01952 and the parallel-replica remote() un-skips are intact.

alexey-milovidov added a commit that referenced this pull request Jun 15, 2026
`04308_remote_storage_engine` exercises the multi-shard case
`Remote('127.0.0.{1,2}', system, one)`, which connects to the second
loopback shard `127.0.0.2:9000`. On the `arm_darwin` Fast test runner,
macOS binds only `127.0.0.1` on `lo0` and does not auto-route the rest
of `127.0.0.0/8`, so `127.0.0.2` is unroutable and the query fails with
`ALL_CONNECTION_TRIES_FAILED`.

This is the same macOS shard-test infrastructure issue already handled
for the sibling tests `04327_rewrite_aggregate_function_with_if_distributed`
and `04336_parallel_blocks_marshalling_low_cardinality_native_format`,
which were added to `ci/defs/darwin.skip` in #107376. `04308` is a new
test introduced by this pull request, so it was not covered there. Add
it to `ci/defs/darwin.skip` for consistency until the runner-side fix
(#107435) aliases the additional loopback addresses and these tests can
run on macOS again.

The test itself is unchanged and keeps full coverage on Linux.

Report: https://s3.amazonaws.com/clickhouse-test-reports/json.html?PR=106189&sha=dbc0fc28753abffe3096e1064be57a6c440263b6&name_0=PR&name_1=Fast%20test%20%28arm_darwin%29
Related: #107376
Related: #107435

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Fast test (arm_darwin) job inlined the lo0 alias setup, fast_test.py
invocation, and fail-closed teardown into the job command string. praktika
processes that string twice in ways that broke on shell syntax:

  1. parametrize() runs str.format(PARAMETER=...) on the command, so a bash
     brace group { ...; } was parsed as a format field -> KeyError.
  2. the run-command validator splits on spaces and asserts the first token
     containing '/' is a real path; 'python3 ./ci/jobs/fast_test.py;' carried
     the trailing ';' -> AssertionError, failing Config Workflow and dropping
     every downstream job.

Move the whole sequence into ci/jobs/scripts/fast_test_darwin.sh and make the
command the bare script path, mirroring the existing sqlancer_job.sh job. The
script keeps the fail-closed teardown (remove only present 127.0.0.2..16
aliases, fail the job on a failed removal, tolerate already-absent ones) and
preserves fast_test.py's exit code. Add the script to the Darwin fast test
digest so edits reschedule the job.

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

Copy link
Copy Markdown
Contributor Author

@Algunenano The config-load breakage is fixed in 73a2728.

After the parametrize() brace fix, the actual fork CI run hit a second praktika check on the same inlined command. The run-command validator (validator.py:296) splits the command on spaces and asserts the first token containing '/' is a real path, but that token was ./ci/jobs/fast_test.py; with the trailing ';' glued on -> AssertionError in Config Workflow, dropping every downstream job.

Both failures (the str.format brace KeyError and this) came from inlining shell into the job command string. Fix: moved the lo0 alias setup + fast_test.py + fail-closed teardown into ci/jobs/scripts/fast_test_darwin.sh and made the command the bare script path, mirroring the existing sqlancer_job.sh job. The command now has no braces and no trailing ';', so neither check can trip again.

Verified locally: Validator().validate() passes over all 17 workflows (the Config Workflow step that failed). The fail-closed teardown is preserved (removes only present 127.0.0.2..16 aliases, fails the job on a failed removal, tolerates already-absent ones) and fast_test.py's exit code is kept.

Comment thread ci/jobs/scripts/fast_test_darwin.sh Outdated
praktika's runner.py appends local-run selectors (--test, --param, ...) to
job.command, and the previous inlined `python3 ./ci/jobs/fast_test.py`
consumed them directly. The fast_test_darwin.sh wrapper invoked fast_test.py
with no arguments, so a targeted Darwin run such as
`python -m ci.praktika run fast --test 02947_parallel_replicas_remote --param test`
ran the full suite instead of narrowing to the requested test/param.

Pass "$@" through to fast_test.py so the wrapper preserves the original
argument contract. The fail-closed lo0-alias setup/teardown and the
fast_test.py exit code are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Algunenano Algunenano removed the manual approve Manual approve required to run CI label Jun 16, 2026
@alexey-milovidov

Copy link
Copy Markdown
Member

@Algunenano Algunenano self-assigned this Jun 16, 2026

@Algunenano Algunenano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM. Although I think this should be handled in the machines themselves and they shouldn't be reused without control (cc @leshikus) but let's unblock this

@Algunenano Algunenano added this pull request to the merge queue Jun 16, 2026
Merged via the queue into ClickHouse:master with commit 56ae9f0 Jun 16, 2026
166 checks passed
@robot-ch-test-poll4 robot-ch-test-poll4 added the pr-synced-to-cloud The PR is synced to the cloud repo label Jun 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

can be tested Allows running workflows for external contributors pr-ci pr-synced-to-cloud The PR is synced to the cloud repo

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants