Last active
January 18, 2025 20:30
-
-
Save ihcsim/db65eba1c7ff1a45f2d7a7d2784fb041 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Evaluate runs a compiled CEL admission plugin expression using the provided activation and CEL | |
// runtime cost budget. | |
func (a *evaluationActivation) Evaluate(ctx context.Context, compositionCtx CompositionContext, compilationResult CompilationResult, remainingBudget int64) (EvaluationResult, int64, error) { | |
// ... | |
t1 := time.Now() | |
evalResult, evalDetails, err := compilationResult.Program.ContextEval(ctx, a) | |
// budget may be spent due to lazy evaluation of composited variables | |
if compositionCtx != nil { | |
compositionCost := compositionCtx.GetAndResetCost() | |
if compositionCost > remainingBudget { | |
return evaluation, -1, &cel.Error{ | |
Type: cel.ErrorTypeInvalid, | |
Detail: "validation failed due to running out of cost budget, no further validation rules will be run", | |
Cause: cel.ErrOutOfBudget, | |
} | |
} | |
remainingBudget -= compositionCost | |
} | |
elapsed := time.Since(t1) | |
evaluation.Elapsed = elapsed | |
if evalDetails == nil { | |
return evaluation, -1, &cel.Error{ | |
Type: cel.ErrorTypeInternal, | |
Detail: fmt.Sprintf("runtime cost could not be calculated for expression: %v, no further expression will be run", compilationResult.ExpressionAccessor.GetExpression()), | |
} | |
} else { | |
rtCost := evalDetails.ActualCost() | |
if rtCost == nil { | |
return evaluation, -1, &cel.Error{ | |
Type: cel.ErrorTypeInvalid, | |
Detail: fmt.Sprintf("runtime cost could not be calculated for expression: %v, no further expression will be run", compilationResult.ExpressionAccessor.GetExpression()), | |
Cause: cel.ErrOutOfBudget, | |
} | |
} else { | |
if *rtCost > math.MaxInt64 || int64(*rtCost) > remainingBudget { | |
return evaluation, -1, &cel.Error{ | |
Type: cel.ErrorTypeInvalid, | |
Detail: "validation failed due to running out of cost budget, no further validation rules will be run", | |
Cause: cel.ErrOutOfBudget, | |
} | |
} | |
remainingBudget -= int64(*rtCost) | |
} | |
} | |
// ... | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment