Skip to content

Commit 83ebcc0

Browse files
authored
Protect kindToResourceCache with RWMutex (#385)
Fixes #384
1 parent e9a98c8 commit 83ebcc0

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

internal/webhook/appwrapper_webhook.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"bytes"
2121
"context"
2222
"fmt"
23+
"sync"
2324

2425
authv1 "k8s.io/api/authorization/v1"
2526
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -56,6 +57,7 @@ var (
5657
type rbacACSupport struct {
5758
discoveryClient *discovery.DiscoveryClient
5859
subjectAccessReviewer authClientv1.SubjectAccessReviewInterface
60+
cacheMutex sync.RWMutex
5961
kindToResourceCache map[string]string
6062
}
6163

@@ -281,16 +283,21 @@ func (w *appWrapperWebhook) validateAppWrapperUpdate(old *awv1beta2.AppWrapper,
281283
}
282284

283285
func (w *appWrapperWebhook) lookupResource(gvk *schema.GroupVersionKind) string {
286+
w.rbacACSupport.cacheMutex.RLock()
284287
if known, ok := w.rbacACSupport.kindToResourceCache[gvk.String()]; ok {
288+
w.rbacACSupport.cacheMutex.RUnlock()
285289
return known
286290
}
291+
w.rbacACSupport.cacheMutex.RUnlock()
287292
resources, err := w.rbacACSupport.discoveryClient.ServerResourcesForGroupVersion(gvk.GroupVersion().String())
288293
if err != nil {
289294
return "*"
290295
}
291296
for _, r := range resources.APIResources {
292297
if r.Kind == gvk.Kind {
298+
w.rbacACSupport.cacheMutex.Lock()
293299
w.rbacACSupport.kindToResourceCache[gvk.String()] = r.Name
300+
w.rbacACSupport.cacheMutex.Unlock()
294301
return r.Name
295302
}
296303
}

0 commit comments

Comments
 (0)