domain, session: Add new sysvarcache to replace global values cache (#24359)#26030
domain, session: Add new sysvarcache to replace global values cache (#24359)#26030ti-srebot wants to merge 1 commit intopingcap:release-4.0from
Conversation
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>
|
[REVIEW NOTIFICATION] This pull request has not been approved. To complete the pull request process, please ask the reviewers in the list to review by filling The full list of commands accepted by this bot can be found here. DetailsReviewer can indicate their review by submitting an approval review. |
|
@ti-srebot: This cherry pick PR is for a release branch and has not yet been approved by release team. To merge this cherry pick, it must first be approved by the collaborators. AFTER it has been approved by collaborators, please ping the release team in a comment to request a cherry pick review. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
|
/run-all-tests |
|
Hello! I'm sorry, I discussed cherry picking this before with my reviewers. We agreed that it looks like it is too risky unfortunately :( I am going to close this issue. But please feel free to reach out to me if you have evidence to the contrary. |
cherry-pick #24359 to release-4.0
You can switch your code base to this Pull Request by using git-extras:
# In tidb repo: git pr https://github.com/pingcap/tidb/pull/26030After apply modifications, you can push your change to this PR via:
What problem does this PR solve?
Issue Number: close #24326
Problem Summary:
The existing global vars cache only caches for 2 seconds, and does not perform notification to other servers when cache is invalid. This PR changes the design to be basically the same as the privileges system cache.
It fixes two immediate bugs:
SHOW VARIABLESfor the first time in a session previously took 1 second in some cases(!). It should now read the values from memory.What is changed and how it works?
What's Changed:
mysql.global_variables.This opens the door, but does not fix some remaining issues - the session cache should be populated with a copy of all session vars when the session starts. Currently there is a lazy loading mechanism which is not MySQL compatible. It also caches some global variables in the session
systems[]which is incorrect. In a followup PR I hope to remove the arraybuiltinGlobalVariableand simplifyloadCommonGlobalVariablesIfNeededto just copy session vars.Related changes
Check List
Tests
I manually verified that behavior is correct with multiple servers receiving notice from etcd.
Side effects
SET GLOBALstatement is run on the older version, it will not send an etcd notification to newer servers that their cache is stale. I think this behavior is acceptable, since the cache will be refreshed within a few minutes, but it should be made clear in the release notes.Release note