From e7a04b9138695b68e7cdfb4a8ec08911737f4da0 Mon Sep 17 00:00:00 2001 From: shuting Date: Thu, 7 Jan 2021 16:26:59 -0800 Subject: [PATCH] Fix memory leak - remove item from the cache once done (audit handler) (#1459) * remove entry from audit handler * fix test --- pkg/engine/wildcards/wildcards_test.go | 2 +- pkg/webhooks/validate_audit.go | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkg/engine/wildcards/wildcards_test.go b/pkg/engine/wildcards/wildcards_test.go index baee76bece..bdb51d2993 100644 --- a/pkg/engine/wildcards/wildcards_test.go +++ b/pkg/engine/wildcards/wildcards_test.go @@ -15,7 +15,7 @@ func TestExpandInMetadata(t *testing.T) { testExpand(t, map[string]string{"=(test/*)": "test"}, map[string]string{"test/test": "test"}, map[string]interface{}{"=(test/test)": "test"}) - testExpand(t, map[string]string{"test/*": "*"}, map[string]string{"test/test1": "test1", "test/test2": "test2"}, + testExpand(t, map[string]string{"test/*": "*"}, map[string]string{"test/test1": "test1"}, map[string]interface{}{"test/test1": "*"}) } diff --git a/pkg/webhooks/validate_audit.go b/pkg/webhooks/validate_audit.go index 6a1e89d756..b4c17ca31b 100644 --- a/pkg/webhooks/validate_audit.go +++ b/pkg/webhooks/validate_audit.go @@ -1,6 +1,7 @@ package webhooks import ( + "strings" "time" "github.com/go-logr/logr" @@ -129,7 +130,7 @@ func (h *auditHandler) processNextWorkItem() bool { } err := h.process(request) - h.handleErr(err) + h.handleErr(err, obj, request) return true } @@ -176,6 +177,20 @@ func (h *auditHandler) process(request *v1beta1.AdmissionRequest) error { return nil } -func (h *auditHandler) handleErr(err error) { +func (h *auditHandler) handleErr(err error, key interface{}, request *v1beta1.AdmissionRequest) { + logger := h.log.WithName("handleErr") + if err == nil { + h.queue.Forget(key) + return + } + k := strings.Join([]string{request.Kind.Kind, request.Namespace, request.Name}, "/") + if h.queue.NumRequeues(key) < workQueueRetryLimit { + logger.V(3).Info("retrying processing admission request", "key", k, "error", err.Error()) + h.queue.AddRateLimited(key) + return + } + + logger.Error(err, "failed to process admission request", "key", k) + h.queue.Forget(key) }