Fix IntOrString cost estimation when schema has a MaxLength constraint #132837
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 bug
What this PR does / why we need it:
This updates the way that the maximum size of an IntOrString is calculated in the CEL cost estimator to take into account an openapi maxlength constraint.
I was working with someone on a field like:
We then started adding some CEL rules, for example,
The API server started to complain of high validation costs. Typically this is because the unbounded string length results in a high
MaxElements
in the cost estimates.The usual fix would be to add a maximum length, for example:
But this doesn't work initially because of the way controller-gen is applying different parts of the schema, adding
Allows it to produce the following schema:
We then noticed that the cost estimates were still particularly high. It turns out, that the logic handling any
XIntOrString
field isn't correctly observing theMaxLength
.As far as I can tell, the above is a valid schema and the API server appears to accept this schema, and enforce the maximum string length (note int64 has a maximum length of 19 so the integer max length should be covered by this case too, though CELs cost estimates for integers doesn't set a max elements AFAICT)
This PR updates the logic to take into account the max length and resolves our issue.
Which issue(s) this PR is related to:
Special notes for your reviewer:
Does this PR introduce a user-facing change?
Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.: