[BugFix] Fix sync publish failed after BE restart (backport #51045) #51179
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 will return publish success after tablet apply finished if we enable sync publish to avoid waiting apply during query. However, if BE restart, we will return publish success even though the apply is not finished. So the query may get
query time out
issue after BE restarted.The reason is the transaction related tablets is lost after BE restart. For primary key table, if BE receive publish request, BE will delete committed rowset meta and rewrite rowset meta into
TabletMeta
, so the transaction related tablet info are lost if we restart BE during waiting apply finished.What I'm doing:
If BE restarted, add the tablet which
max_readable_version
less thanrequest_version
intoerror_tablet_ids
. Then the transaction will be visible until all those tablets apply finished.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 #51045 done by [Mergify](https://mergify.com). ## Why I'm doing: We will return publish success after tablet apply finished if we enable sync publish to avoid waiting apply during query. However, if BE restart, we will return publish success even though the apply is not finished. So the query may get `query time out` issue after BE restarted.
The reason is the transaction related tablets is lost after BE restart. For primary key table, if BE receive publish request, BE will delete committed rowset meta and rewrite rowset meta into
TabletMeta
, so the transaction related tablet info are lost if we restart BE during waiting apply finished.What I'm doing:
If BE restarted, add the tablet which
max_readable_version
less thanrequest_version
intoerror_tablet_ids
. Then the transaction will be visible until all those tablets apply finished.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: