build cached restmapper based on Kubernetes restmapper #3819
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What type of PR is this?
/kind cleanup
What this PR does / why we need it:
The reason why we introduced the cachedRESTMapper is to improve performance, especially when retrieve the GVR as per a GVR, such as here.
We built the
cachedRESTMapper
based on controller-runtime DynamicRESTMapper, but there is a breaking change happened in v0.15.0, and we can't build thecachedRESTMapper
with it. This issue blocks the updation of Kubernetes dependencies.This PR tries to build the
cachedRESTMapper
with Kubernetes RESTMapper. This PR is a kind of predecessor task of #3730.Which issue(s) this PR fixes:
Fixes #
Special notes for your reviewer:
Before this change, the benchmark result:
The result shows that cachedRESTMapper has a significant performance advantage.
With this change:
The result seems to show that the performance after refactoring is weaker, but in fact, it's not. The performance of
cachedRESTMapper
appears lower because there is a non-existent resource in the test suites, that causecachedRESTMapper
rebuild the underlying mapper. As a comparison, controller-runtime's restmapper doesn't rebuild so many times because it is limited by the rate limiter.In Karmada, it is rare to query non-exist resources(unless a new CRD is created). After removing the non-exist resource test from the test suite, the result as follows:
The performance advantage is still significant.
Does this PR introduce a user-facing change?: