@@ -20,8 +20,6 @@ import (
20
20
"context"
21
21
"fmt"
22
22
"io"
23
- "sync"
24
-
25
23
"k8s.io/apiserver/pkg/cel/environment"
26
24
"k8s.io/apiserver/pkg/features"
27
25
utilfeature "k8s.io/apiserver/pkg/util/feature"
@@ -47,12 +45,6 @@ import (
47
45
clientset "k8s.io/client-go/kubernetes"
48
46
)
49
47
50
- var (
51
- // filterCompiler is memory heavy, so we only want to create it once and share it.
52
- filterCompilerOnce sync.Once
53
- filterCompiler cel.FilterCompiler
54
- )
55
-
56
48
// Webhook is an abstract admission plugin with all the infrastructure to define Admit or Validate on-top.
57
49
type Webhook struct {
58
50
* admission.Handler
@@ -64,6 +56,7 @@ type Webhook struct {
64
56
namespaceMatcher * namespace.Matcher
65
57
objectMatcher * object.Matcher
66
58
dispatcher Dispatcher
59
+ filterCompiler cel.FilterCompiler
67
60
authorizer authorizer.Authorizer
68
61
}
69
62
@@ -101,17 +94,14 @@ func NewWebhook(handler *admission.Handler, configFile io.Reader, sourceFactory
101
94
cm .SetAuthenticationInfoResolver (authInfoResolver )
102
95
cm .SetServiceResolver (webhookutil .NewDefaultServiceResolver ())
103
96
104
- filterCompilerOnce .Do (func () {
105
- filterCompiler = cel .NewFilterCompiler (environment .MustBaseEnvSet (environment .DefaultCompatibilityVersion (), utilfeature .DefaultFeatureGate .Enabled (features .StrictCostEnforcementForWebhooks )))
106
- })
107
-
108
97
return & Webhook {
109
98
Handler : handler ,
110
99
sourceFactory : sourceFactory ,
111
100
clientManager : & cm ,
112
101
namespaceMatcher : & namespace.Matcher {},
113
102
objectMatcher : & object.Matcher {},
114
103
dispatcher : dispatcherFactory (& cm ),
104
+ filterCompiler : cel .NewFilterCompiler (environment .MustBaseEnvSet (environment .DefaultCompatibilityVersion (), utilfeature .DefaultFeatureGate .Enabled (features .StrictCostEnforcementForWebhooks ))),
115
105
}, nil
116
106
}
117
107
@@ -237,7 +227,7 @@ func (a *Webhook) ShouldCallHook(ctx context.Context, h webhook.WebhookAccessor,
237
227
return nil , apierrors .NewInternalError (err )
238
228
}
239
229
240
- matcher := h .GetCompiledMatcher (filterCompiler )
230
+ matcher := h .GetCompiledMatcher (a . filterCompiler )
241
231
matchResult := matcher .Match (ctx , versionedAttr , nil , a .authorizer )
242
232
243
233
if matchResult .Error != nil {
0 commit comments