[BugFix] Capture query context when use its mem_tracker out of its lifetime (backport #49123) #49161
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
RuntimeFilterWorker may handle a delay runtime filter of a pre-maturely terminating query, so a query context is destructed before the using its query-level mem_tacker in RuntimeFilterWorker. when this mem_tracker is undergoing
desctruction, its parent mem_tracker (e.g. resource_group-level mem_tracker) would be accessed, however, the resource-group-level mem trackers has already been destructed when the resource group is dropped or altered.
Using query-level mem-tracker beyond query context's life time may lead to BE's crash as follows:
What I'm doing:
We need capture query context to prevent it from being destructed, and when a dropping resource_group is used by outstanding query contexts, it would be delayed to be dropped until all its outstanding query contexts are destructed.
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 #49123 done by [Mergify](https://mergify.com). ## Why I'm doing RuntimeFilterWorker may handle a delay runtime filter of a pre-maturely terminating query, so a query context is destructed before the using its query-level mem_tacker in RuntimeFilterWorker. when this mem_tracker is undergoing desctruction, its parent mem_tracker (e.g. resource_group-level mem_tracker) would be accessed, however, the resource-group-level mem trackers has already been destructed when the resource group is dropped or altered.
Using query-level mem-tracker beyond query context's life time may lead to BE's crash as follows:
What I'm doing:
We need capture query context to prevent it from being destructed, and when a dropping resource_group is used by outstanding query contexts, it would be delayed to be dropped until all its outstanding query contexts are destructed.
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: