Precompute IsNamespaceScoped to avoid expensive schema reads (#4152)

* Precompute IsNamespaceScoped to avoid expensive schema reads

See https://github.com/GoogleContainerTools/kpt/issues/2469

For the `gcr.io/kpt-fn/set-namespace:v0.1` function, over 50% of CPU
time is spent on IsNamespaceScoped. Instead of unmarshalling 100k lines
of JSON to determine this, instead just precompute it. We can ensure
this never is inaccurate as the test verifies the precomputed result is
up to date.

In real world kpt pipelines this cuts execution of set-namespace (and
similar functions, just an example of a trivial function) from 2.0s to
1.0s. Because these functions are run in long pipelines over many
resources, this adds up a lot.

* Add documentation
This commit is contained in:
John Howard
2021-09-09 10:08:11 -07:00
committed by GitHub
parent 2b8a39373e
commit 402f6ca72b
3 changed files with 112 additions and 1 deletions

View File

@@ -39,6 +39,12 @@ The above command will update the [OpenAPI schema] and the [Kustomization schema
create a directory kubernetesapi/v1212 and store the resulting
swagger.json and swagger.go files there.
#### Precomputations
To avoid expensive schema lookups, some functions have precomputed results based on the schema. Unit tests
ensure these are kept in sync with the schema; if these tests fail you will need to follow the suggested diff
to update the precomputed results.
### Run all tests
At the top of the repository, run the tests.