StarRocks, a Linux Foundation project, is a next-generation sub-second MPP OLAP database for full analytics scenarios, including multi-dimensional analytics, real-time analytics, and ad-hoc queries.
There is deadlock in tablet schema map.
In TabletSchemaMap::emplace, there is a local variable TabletSchemPtr ptr inside the lock scope.
The TabletSchema object pointed by ptr may be destructed inside the lock scope, and its destructor will call TabletSchemaMap::erase which also try to lock, causing a deadlock.
What I'm doing:
Define the local variable TabletSchemPtr ptr outside the lock scope, making the destruction outside the lock scope.
Fixes #issue
What type of PR is this:
[x] BugFix
[ ] Feature
[ ] Enhancement
[ ] Refactor
[ ] UT
[ ] Doc
[ ] Tool
Does this PR entail a change in behavior?
[ ] Yes, this PR will result in a change in behavior.
[x] No, this PR will not result in a change in behavior.
If yes, please specify the type of change:
[ ] Interface/UI changes: syntax, type conversion, expression evaluation, display information
[ ] Parameter changes: default values, similar parameters but with different default values
[ ] Policy changes: use new policy to replace old one, functionality automatically enabled
[ ] Feature removed
[ ] Miscellaneous: upgrade & downgrade compatibility, etc.
Checklist:
[x] I have added test cases for my bug fix or my new feature
[ ] This pr needs user documentation (for new or modified features or behaviors)
[ ] I have added documentation for my new feature or new function
[x] This is a backport pr
Bugfix cherry-pick branch check:
[x] I have checked the version labels which the pr will be auto-backported to the target branch
[x] 3.3
[x] 3.2
[ ] 3.1
[ ] 3.0
[ ] 2.5
This is an automatic backport of pull request #47539 done by Mergify.
Why I'm doing:
There is deadlock in tablet schema map.
In TabletSchemaMap::emplace, there is a local variable TabletSchemPtr ptr inside the lock scope.
The TabletSchema object pointed by ptr may be destructed inside the lock scope, and its destructor will call TabletSchemaMap::erase which also try to lock, causing a deadlock.
What I'm doing:
Define the local variable TabletSchemPtr ptr outside the lock scope, making the destruction outside the lock scope.
Fixes #issue
What type of PR is this:
[x] BugFix
[ ] Feature
[ ] Enhancement
[ ] Refactor
[ ] UT
[ ] Doc
[ ] Tool
Does this PR entail a change in behavior?
[ ] Yes, this PR will result in a change in behavior.
[x] No, this PR will not result in a change in behavior.
If yes, please specify the type of change:
[ ] Interface/UI changes: syntax, type conversion, expression evaluation, display information
[ ] Parameter changes: default values, similar parameters but with different default values
[ ] Policy changes: use new policy to replace old one, functionality automatically enabled
[ ] Feature removed
[ ] Miscellaneous: upgrade & downgrade compatibility, etc.
Checklist:
[x] I have added test cases for my bug fix or my new feature
[ ] This pr needs user documentation (for new or modified features or behaviors)
[ ] I have added documentation for my new feature or new function
Why I'm doing:
There is deadlock in tablet schema map. In
TabletSchemaMap::emplace
, there is a local variableTabletSchemPtr ptr
inside the lock scope. The TabletSchema object pointed byptr
may be destructed inside the lock scope, and its destructor will callTabletSchemaMap::erase
which also try to lock, causing a deadlock.What I'm doing:
Define the local variable
TabletSchemPtr ptr
outside the lock scope, making the destruction outside the lock scope.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 #47539 done by Mergify.
Why I'm doing:
There is deadlock in tablet schema map. In
TabletSchemaMap::emplace
, there is a local variableTabletSchemPtr ptr
inside the lock scope. The TabletSchema object pointed byptr
may be destructed inside the lock scope, and its destructor will callTabletSchemaMap::erase
which also try to lock, causing a deadlock.What I'm doing:
Define the local variable
TabletSchemPtr ptr
outside the lock scope, making the destruction outside the lock scope.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: