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

Log Backup: decouple log backup resolve locks from GCWorker. (#45904) #46893

Merged

Conversation

ti-chi-bot
Copy link
Member

This is an automated cherry-pick of #45904

What problem does this PR solve?

Issue Number: close #40759
Problem Summary:
#35403 introduce 1 minute scan locks of the whole cluster in GCWorker. which will cost CPU when cluster has large number of regions. This PR try to decouple it.

What is changed and how it works?

  1. Record checkpoint and move resolve locks in advancer.
  2. Abstract GCWorkerLockResolver used for LogBackup/GCWorker/GCWorkerTest. move ResolveLocksForRange into gcutil.go to avoid cycle import.
 GCLockResolver is used for GCWorker and log backup advancer to resolve locks.
// #Note: Put it here to avoid cycle import
ype GCLockResolver interface {
 	// ResolveLocks tries to resolve expired locks.
 	// 1. For GCWorker it will scan locks for all regions before *safepoint*,
 	// and force remove locks. rollback the txn, no matter the lock is expired of not.
 	// 2. For log backup advancer, it will scan all locks for a small range.
 	// and it will check status of the txn. resolve the locks if txn is expired, Or do nothing.
 	ResolveLocks(*tikv.Backoffer, []*txnlock.Lock, tikv.RegionVerID) (bool, error)

 	// ScanLocks only used for mock test.
 	ScanLocks([]byte, uint64) []*txnlock.Lock
 	// We need to get tikvStore to build rangerunner.
 	// TODO: the most code is in client.go and the store is only used to locate end keys of a region.
 	// maybe we can move GCLockResolver into client.go.
 	GetStore() tikv.Storage
 }
  1. Remove logbackup logic in GCWorker.

Check List

Tests

  • Unit test
  • Integration test
  • Manual test (add detailed scripts or steps below)
    before this PR, resolve lock every minutes
image

with this PR. resolve lock every 10 minutes. which will save CPU usage.
image

and check lock resolved.
image

Side effects

  • Performance regression: Consumes more CPU
  • Performance regression: Consumes more Memory
  • Breaking backward compatibility

Documentation

  • Affects user behaviors
  • Contains syntax changes
  • Contains variable changes
  • Contains experimental features
  • Changes MySQL compatibility

Release note

Please refer to Release Notes Language Style Guide to write a quality release note.

Decouple log backup resolve locks from GCWorker to save TiKV CPU usage.

Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
@ti-chi-bot ti-chi-bot added ok-to-test Indicates a PR is ready to be tested. release-note Denotes a PR that will be considered when it comes time to generate release notes. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. type/cherry-pick-for-release-6.5 This PR is cherry-picked to release-6.5 from a source PR. labels Sep 12, 2023
@ti-chi-bot ti-chi-bot added the cherry-pick-approved Cherry pick PR approved by release team. label Sep 12, 2023
@ti-chi-bot ti-chi-bot bot added needs-1-more-lgtm Indicates a PR needs 1 more LGTM. approved labels Sep 12, 2023
Copy link
Contributor

@MyonKeminta MyonKeminta left a comment

Choose a reason for hiding this comment

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

GCWorker part LGTM

@codecov
Copy link

codecov bot commented Sep 12, 2023

Codecov Report

❗ No coverage uploaded for pull request base (release-6.5@10a4f67). Click here to learn what that means.
The diff coverage is n/a.

Additional details and impacted files
@@               Coverage Diff                @@
##             release-6.5     #46893   +/-   ##
================================================
  Coverage               ?   73.6863%           
================================================
  Files                  ?       1084           
  Lines                  ?     348260           
  Branches               ?          0           
================================================
  Hits                   ?     256620           
  Misses                 ?      75174           
  Partials               ?      16466           

@ti-chi-bot
Copy link

ti-chi-bot bot commented Sep 12, 2023

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: BornChanger, Leavrth

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ti-chi-bot ti-chi-bot bot added lgtm and removed needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Sep 12, 2023
@ti-chi-bot
Copy link

ti-chi-bot bot commented Sep 12, 2023

[LGTM Timeline notifier]

Timeline:

  • 2023-09-12 08:21:30.95656198 +0000 UTC m=+343872.881118370: ☑️ agreed by Leavrth.
  • 2023-09-12 11:52:42.20658916 +0000 UTC m=+356544.131145556: ☑️ agreed by BornChanger.

@ti-chi-bot ti-chi-bot bot merged commit ec0ffe8 into pingcap:release-6.5 Sep 12, 2023
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved cherry-pick-approved Cherry pick PR approved by release team. lgtm ok-to-test Indicates a PR is ready to be tested. release-note Denotes a PR that will be considered when it comes time to generate release notes. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. type/cherry-pick-for-release-6.5 This PR is cherry-picked to release-6.5 from a source PR.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants