[BugFix] Capture resource group for scan task (backport #51121) #51186
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why I'm doing:
The scan task queue is a two-level queue:
workgroup_entity
queue, which stores raw pointers toworkgroup_entity
. Theseworkgroup_entities
are owned by their workgroups.workgroup_entity
contains an internal task queue. Each task within this queue also has a raw pointer to the associated workgroup.When retrieving a task from the scan task queue, the process first accesses the
workgroup_entity
and then extracts a task from the internal task queue of thatworkgroup_entity
.However, the lifecycle of a scan task can be longer than that of the corresponding pipeline driver and workgroup. When executing the SQL command
DROP RESOURCE GROUP
, the workgroup is deleted once all associated pipeline drivers have completed.This can lead to a situation where the
workgroup_entity
and its corresponding tasks still reside in the scan task queue, but the workgroup itself has already been released. In such cases, accessing theworkgroup_entity
results in a "use-after-free" error.What I'm doing:
To prevent this issue, each task should hold a shared pointer to the workgroup. This ensures that the workgroup will not be deleted as long as there are tasks in the scan task queue referencing it.
Fixes #issue
What type of PR is this:
Does this PR entail a change in behavior?
If yes, please specify the type of change:
Checklist:
Bugfix cherry-pick branch check:
This is an automatic backport of pull request #51121 done by [Mergify](https://mergify.com). ## Why I'm doing: The scan task queue is a two-level queue: - **First level**: The `workgroup_entity` queue, which stores raw pointers to `workgroup_entity`. These `workgroup_entities` are owned by their workgroups. - **Second level**: The task queue, where each `workgroup_entity` contains an internal task queue. Each task within this queue also has a raw pointer to the associated workgroup.
When retrieving a task from the scan task queue, the process first accesses the
workgroup_entity
and then extracts a task from the internal task queue of thatworkgroup_entity
.However, the lifecycle of a scan task can be longer than that of the corresponding pipeline driver and workgroup. When executing the SQL command
DROP RESOURCE GROUP
, the workgroup is deleted once all associated pipeline drivers have completed.This can lead to a situation where the
workgroup_entity
and its corresponding tasks still reside in the scan task queue, but the workgroup itself has already been released. In such cases, accessing theworkgroup_entity
results in a "use-after-free" error.What I'm doing:
To prevent this issue, each task should hold a shared pointer to the workgroup. This ensures that the workgroup will not be deleted as long as there are tasks in the scan task queue referencing it.
Fixes #issue
What type of PR is this:
Does this PR entail a change in behavior?
If yes, please specify the type of change:
Checklist: