-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix for transactions not allowed to finish during PlannedReparentShard #8089
Conversation
Signed-off-by: Harshit Gangal <[email protected]>
…d to serve query Signed-off-by: Harshit Gangal <[email protected]>
Signed-off-by: Harshit Gangal <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you link the previous issue and PR? Is this a straight revert of the previous fix?
The fix for the old issue is still inplace. This PR removes the additional check done to retrieve queryservice using tablet alias. |
Yes, we need to do both the release after merge and backported. |
Backport of vitessio#8089 This is a combination of 3 commits. * remove precheck of tablet serving and target * remove the additional logic and return error if queryservice not found to serve query * fix test as per new change Signed-off-by: Harshit Gangal <[email protected]> Signed-off-by: Andres Taylor <[email protected]>
Backport of vitessio#8089 This is a combination of 3 commits. * remove precheck of tablet serving and target * remove the additional logic and return error if queryservice not found to serve query * fix test as per new change Signed-off-by: Harshit Gangal <[email protected]> Signed-off-by: Andres Taylor <[email protected]>
// ChangeTabletType changes the tablet type. | ||
func (sbc *SandboxConn) ChangeTabletType(typ topodatapb.TabletType) { | ||
sbc.tablet.Type = typ | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Where is this being used?
Description
In a recent fix, an issue was introduced.
Before sending queries to a tablet, #7879 changed the behaviour to check if the tablet is ready to answer, by checking it's
ServingStatus
and that the tablet type hasn't changed.If
PlannedReparentShard
is going on, this check should not be done for transactions in flight.The vttablet waits for inflight transactions to get
commit
/rollback
i.e. we want queries to existing transaction to be sent down to get the transaction completed, even if the tablet is currently saying it isNotServing
.The test that exposed this issue was already in the code base:
go/test/endtoend/tabletgateway/buffer/buffer_test.go
became flaky after #7879 was merged.So, to fix the issue, the pre-check is removed from Gateway when getting the tablet connection for existing active shard_sessions with vttablet.
This also imply that the reserved connection that used to reset based on this pre-check logic will have to hit the vttablet first and then only will reset the shard session on receiving the expected error making it two round trips.
Related Issue(s)
Bug introduced in #7879
Checklist