From 47b1266503647c159502d2eaa01a2a20d9cf5e5e Mon Sep 17 00:00:00 2001
From: shuting <shuting@nirmata.com>
Date: Tue, 28 Jun 2022 11:58:23 +0800
Subject: [PATCH] - Disable events generation on DELETE; - Reduce event
 generation retry from 10 to 3 (#4159)

Signed-off-by: ShutingZhao <shuting@nirmata.com>
---
 pkg/event/util.go                   |  2 +-
 pkg/webhooks/resource/handlers.go   | 19 +++++++++++++++----
 pkg/webhooks/resource/validation.go |  6 ++++--
 3 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/pkg/event/util.go b/pkg/event/util.go
index 4e2ec4342a..28871bd5e7 100644
--- a/pkg/event/util.go
+++ b/pkg/event/util.go
@@ -2,7 +2,7 @@ package event
 
 const eventWorkQueueName = "kyverno-events"
 
-const workQueueRetryLimit = 10
+const workQueueRetryLimit = 3
 
 // Info defines the event details
 type Info struct {
diff --git a/pkg/webhooks/resource/handlers.go b/pkg/webhooks/resource/handlers.go
index 44fc588e42..bae6172a20 100644
--- a/pkg/webhooks/resource/handlers.go
+++ b/pkg/webhooks/resource/handlers.go
@@ -359,8 +359,10 @@ func (h *handlers) handleMutation(logger logr.Logger, request *admissionv1.Admis
 	//   all policies were applied successfully.
 	//   create an event on the resource
 	// ADD EVENTS
-	events := generateEvents(engineResponses, false, logger)
-	h.eventGen.Add(events...)
+	if deletionTimeStamp == nil {
+		events := generateEvents(engineResponses, false, logger)
+		h.eventGen.Add(events...)
+	}
 
 	// debug info
 	func() {
@@ -430,9 +432,18 @@ func (h *handlers) handleVerifyImages(logger logr.Logger, request *admissionv1.A
 	prInfos := policyreport.GeneratePRsFromEngineResponse(engineResponses, logger)
 	h.prGenerator.Add(prInfos...)
 
+	var deletionTimeStamp *metav1.Time
+	if reflect.DeepEqual(policyContext.NewResource, unstructured.Unstructured{}) {
+		deletionTimeStamp = policyContext.NewResource.GetDeletionTimestamp()
+	} else {
+		deletionTimeStamp = policyContext.OldResource.GetDeletionTimestamp()
+	}
+
 	blocked := toBlockResource(engineResponses, logger)
-	events := generateEvents(engineResponses, blocked, logger)
-	h.eventGen.Add(events...)
+	if deletionTimeStamp == nil {
+		events := generateEvents(engineResponses, blocked, logger)
+		h.eventGen.Add(events...)
+	}
 
 	if blocked {
 		logger.V(4).Info("resource blocked")
diff --git a/pkg/webhooks/resource/validation.go b/pkg/webhooks/resource/validation.go
index b8198bb320..6390172a42 100644
--- a/pkg/webhooks/resource/validation.go
+++ b/pkg/webhooks/resource/validation.go
@@ -94,8 +94,10 @@ func (v *validationHandler) handleValidation(
 	// Scenario 3:
 	//   all policies were applied successfully.
 	//   create an event on the resource
-	events := generateEvents(engineResponses, blocked, logger)
-	v.eventGen.Add(events...)
+	if deletionTimeStamp == nil {
+		events := generateEvents(engineResponses, blocked, logger)
+		v.eventGen.Add(events...)
+	}
 
 	if blocked {
 		logger.V(4).Info("resource blocked")