[BugFix] add lock to avoid publish and update schema run concurrency for pk table (backport #52687) #52783
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:
We need to rewrite rowset meta when we update tablet schema. For non-primary key table, we use
_meta_lock
to prevent publish and update schema run concurrency. However, primary key table does not hold_meta_lock
during publish, so update schema and publish could run concurrency. If run concurrency, thepengding_rowset_meta
maybe write again after delete and can not be gc.What I'm doing:
Add lock to prevent run concurrency.
In my test, rewrite 10000 rowset meta(200 columns table) in HDD cost about 1 second. So I believe that holding the lock in rewrite_rs_meta is acceptable.
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 #52687 done by [Mergify](https://mergify.com). ## Why I'm doing: We need to rewrite rowset meta when we update tablet schema. For non-primary key table, we use `_meta_lock` to prevent publish and update schema run concurrency. However, primary key table does not hold `_meta_lock` during publish, so update schema and publish could run concurrency. If run concurrency, the `pengding_rowset_meta` maybe write again after delete and can not be gc.
What I'm doing:
Add lock to prevent run concurrency.
In my test, rewrite 10000 rowset meta(200 columns table) in HDD cost about 1 second. So I believe that holding the lock in rewrite_rs_meta is acceptable.
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: