Skip to content
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

For KeyIsLocked error reported for timeout, if a lock is recently updated, don't try to resolve it. #758

Merged
merged 9 commits into from
Apr 13, 2023

Conversation

ekexium
Copy link
Contributor

@ekexium ekexium commented Mar 31, 2023

@ekexium
Copy link
Contributor Author

ekexium commented Apr 7, 2023

PTAL @MyonKeminta @cfzjywxk . Performance test reveals that the PR introduces slight performance regression. But I haven't figured it out.

// This should only happen for wait timeout.
if lockInfo := keyErr.GetLocked(); lockInfo != nil &&
lockInfo.DurationToLastUpdateMs > 0 &&
lockInfo.DurationToLastUpdateMs < skipResolveThresholdMs {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default wait time in TiKV is 1s and the threshold is 1.2s, it seems that it will never resolve lock if the lock state have ever updated, and the threshold doesn't take any effect.
I think a proper threshold can depend on the actual wait timeout in TiKV, such as something like 0.3*waitTimeout.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 1 second default value is a setting in TiKV and may change without letting client-go know. Did you mean simply setting the threshold to 300ms?
I don't have a clear idea on what an optimal strategy would look like. For the hot-update workload, I think both of the strategies work fine.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe 300ms is fine as the 1 second would not be changed in most cases.
Is there any situation that this setting that would impact performance a lot? I don't come up with one yet.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've verified 300ms threshold in the hot-update workload. It works.

Signed-off-by: ekexium <eke@fastmail.com>
@cfzjywxk
Copy link
Contributor

@MyonKeminta PTAL again

@cfzjywxk cfzjywxk merged commit 67e56a9 into tikv:master Apr 13, 2023
@ekexium ekexium deleted the skip-resolve-lock branch April 14, 2023 03:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants