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

router, config: fix deadlock during closing the router #208

Merged
merged 1 commit into from
Feb 2, 2023

Conversation

djshow832
Copy link
Collaborator

What problem does this PR solve?

Issue Number: close #207

Problem Summary:

  • Close the router may cause deadlock: router.Close() holds router.lock and waits for observer to finish; observer.observe() calls router.OnBackendChanged(), which waits for router.lock.
  • If HealthCheck.Interval==0, even if HealthCheck.Enable==false, there is no interval for calling backendFetcher, which exhausts lots of resources.

What is changed and how it works:

  • Remove the locks for StartScoreBasedRouter() and Close(). The lock intends to protect router.observer and router.cancelFunc but they are not very necessary.
  • Add a HealthCheck.Check() when creating ScoreBasedRouter and PDFetcher.

Check List

Tests

  • Unit test
  • Integration test
  • Manual test (add detailed scripts or steps below)
  • No code

Notable changes

  • Has configuration change
  • Has HTTP API interfaces change (Don't forget to add the declarative for API)
  • Has tiproxyctl change
  • Other user behavior changes

Release note

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

None

@djshow832 djshow832 requested a review from xhebox February 2, 2023 02:02
@xhebox xhebox merged commit 32e96e6 into pingcap:main Feb 2, 2023
@djshow832 djshow832 deleted the health_lock branch February 2, 2023 04:00
xhebox pushed a commit to xhebox/TiProxy that referenced this pull request Mar 7, 2023
xhebox pushed a commit to xhebox/TiProxy that referenced this pull request Mar 13, 2023
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.

Closing router causes deadlock
2 participants