Cherry pick #108391 to 26.6: Fix data race on MemoryReservation release at query finish by robot-ch-test-poll3 · Pull Request #108562 · ClickHouse/ClickHouse · GitHub
Skip to content

Cherry pick #108391 to 26.6: Fix data race on MemoryReservation release at query finish#108562

Open
robot-ch-test-poll3 wants to merge 5 commits into
backport/26.6/108391from
cherrypick/26.6/108391
Open

Cherry pick #108391 to 26.6: Fix data race on MemoryReservation release at query finish#108562
robot-ch-test-poll3 wants to merge 5 commits into
backport/26.6/108391from
cherrypick/26.6/108391

Conversation

@robot-ch-test-poll3

Copy link
Copy Markdown
Contributor

Original pull-request #108391

Do not merge this PR manually

This pull-request is a first step of an automated backporting.
It contains changes similar to calling git cherry-pick locally.
If you intend to continue backporting the changes, then resolve all conflicts if any.
Otherwise, if you do not want to backport them, then just close this pull-request.

The check results does not matter at this step - you can safely ignore them.

Troubleshooting

If the conflicts were resolved in a wrong way

If this cherry-pick PR is completely screwed by a wrong conflicts resolution, and you want to recreate it:

  • delete the pr-cherrypick label from the PR
  • delete this branch from the repository

You also need to check the Original pull-request for pr-backports-created label, and delete if it's presented there

The PR source

The PR is created in the CI job

serxa and others added 5 commits June 24, 2026 15:39
`BlockIO::onFinish` released the memory reservation before finalizing the
pipeline, racing with executor threads that hold raw pointers to it. Release
the query slot early (as before, for slot reuse) but the memory reservation
only after the pipeline is finalized, matching `onException`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The previous commit released the `MemoryReservation` only at the very end of
`BlockIO::onFinish`, after `finalize_query_pipeline` (and therefore after
`CurrentThread::finalizePerformanceCounters`) had already run. The
`MemoryReservationDecreases` profile event emitted by the reservation's
destructor on the query thread then landed after the `query_log` snapshot and
was lost, so `test_scheduler_memory/test.py::test_reserve_memory` failed with
`MemoryReservationDecreases ... got 0`.

Release the memory reservation inside `finalizeQueryPipelineBeforeLogging`,
between `query_pipeline.reset()` and `finalizePerformanceCounters`. This is the
only point that satisfies every constraint at once: the pipeline (and its
threads) have already been torn down so there is no data race and the query's
real memory is already freed (no under-reporting to the memory scheduler), while
the event is still emitted before the `query_log` snapshot so it stays
attributed to the query. The reservation also stays alive through
`query_finish_callback`, which runs before `streams.onFinish`.

`BlockIO::onFinish` keeps releasing the memory reservation only on the
non-logging path; the logging path releases it inside the finalize step.

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

The reservation is released at query teardown (BlockIO::onFinish), after the query's ProfileEvents are snapshotted into query_log, so the decrease is not reliably attributed to the query. Asserting it per-query is race-prone; the test now checks only MemoryReservationIncreases/Killed/Failed.

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

Fix data race on MemoryReservation release at query finish
@robot-ch-test-poll3 robot-ch-test-poll3 added pr-cherrypick Cherry-pick of merge-commit before backporting. Do not use manually - automated use only! do not test disable testing on pull request labels Jun 26, 2026
@azat azat removed their assignment Jun 26, 2026
@robot-clickhouse

Copy link
Copy Markdown
Member

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do not test disable testing on pull request pr-cherrypick Cherry-pick of merge-commit before backporting. Do not use manually - automated use only!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants