From c35caf628d79e90f4fea9088c243cc7d0537f571 Mon Sep 17 00:00:00 2001 From: Haosdent Huang Date: Sun, 27 Jun 2021 16:10:57 +0800 Subject: [PATCH] Pass Object's GVK version when reconcile. --- pkg/handler/enqueue.go | 55 +++++++++++++++++++++++------------- pkg/handler/enqueue_owner.go | 13 +++++++-- pkg/reconcile/reconcile.go | 2 ++ 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/pkg/handler/enqueue.go b/pkg/handler/enqueue.go index e6d3a4eaab..ad31f04b7d 100644 --- a/pkg/handler/enqueue.go +++ b/pkg/handler/enqueue.go @@ -41,25 +41,34 @@ func (e *EnqueueRequestForObject) Create(evt event.CreateEvent, q workqueue.Rate enqueueLog.Error(nil, "CreateEvent received with no metadata", "event", evt) return } - q.Add(reconcile.Request{NamespacedName: types.NamespacedName{ - Name: evt.Object.GetName(), - Namespace: evt.Object.GetNamespace(), - }}) + q.Add(reconcile.Request{ + NamespacedName: types.NamespacedName{ + Name: evt.Object.GetName(), + Namespace: evt.Object.GetNamespace(), + }, + GroupVersionKind: evt.Object.GetObjectKind().GroupVersionKind(), + }) } // Update implements EventHandler. func (e *EnqueueRequestForObject) Update(evt event.UpdateEvent, q workqueue.RateLimitingInterface) { switch { case evt.ObjectNew != nil: - q.Add(reconcile.Request{NamespacedName: types.NamespacedName{ - Name: evt.ObjectNew.GetName(), - Namespace: evt.ObjectNew.GetNamespace(), - }}) + q.Add(reconcile.Request{ + NamespacedName: types.NamespacedName{ + Name: evt.ObjectNew.GetName(), + Namespace: evt.ObjectNew.GetNamespace(), + }, + GroupVersionKind: evt.ObjectNew.GetObjectKind().GroupVersionKind(), + }) case evt.ObjectOld != nil: - q.Add(reconcile.Request{NamespacedName: types.NamespacedName{ - Name: evt.ObjectOld.GetName(), - Namespace: evt.ObjectOld.GetNamespace(), - }}) + q.Add(reconcile.Request{ + NamespacedName: types.NamespacedName{ + Name: evt.ObjectOld.GetName(), + Namespace: evt.ObjectOld.GetNamespace(), + }, + GroupVersionKind: evt.ObjectOld.GetObjectKind().GroupVersionKind(), + }) default: enqueueLog.Error(nil, "UpdateEvent received with no metadata", "event", evt) } @@ -71,10 +80,13 @@ func (e *EnqueueRequestForObject) Delete(evt event.DeleteEvent, q workqueue.Rate enqueueLog.Error(nil, "DeleteEvent received with no metadata", "event", evt) return } - q.Add(reconcile.Request{NamespacedName: types.NamespacedName{ - Name: evt.Object.GetName(), - Namespace: evt.Object.GetNamespace(), - }}) + q.Add(reconcile.Request{ + NamespacedName: types.NamespacedName{ + Name: evt.Object.GetName(), + Namespace: evt.Object.GetNamespace(), + }, + GroupVersionKind: evt.Object.GetObjectKind().GroupVersionKind(), + }) } // Generic implements EventHandler. @@ -83,8 +95,11 @@ func (e *EnqueueRequestForObject) Generic(evt event.GenericEvent, q workqueue.Ra enqueueLog.Error(nil, "GenericEvent received with no metadata", "event", evt) return } - q.Add(reconcile.Request{NamespacedName: types.NamespacedName{ - Name: evt.Object.GetName(), - Namespace: evt.Object.GetNamespace(), - }}) + q.Add(reconcile.Request{ + NamespacedName: types.NamespacedName{ + Name: evt.Object.GetName(), + Namespace: evt.Object.GetNamespace(), + }, + GroupVersionKind: evt.Object.GetObjectKind().GroupVersionKind(), + }) } diff --git a/pkg/handler/enqueue_owner.go b/pkg/handler/enqueue_owner.go index 63699893fc..56c00aabfd 100644 --- a/pkg/handler/enqueue_owner.go +++ b/pkg/handler/enqueue_owner.go @@ -134,9 +134,16 @@ func (e *EnqueueRequestForOwner) getOwnerReconcileRequest(object metav1.Object, // object in the event. if ref.Kind == e.groupKind.Kind && refGV.Group == e.groupKind.Group { // Match found - add a Request for the object referred to in the OwnerReference - request := reconcile.Request{NamespacedName: types.NamespacedName{ - Name: ref.Name, - }} + request := reconcile.Request{ + NamespacedName: types.NamespacedName{ + Name: ref.Name, + }, + GroupVersionKind: schema.GroupVersionKind{ + Group: refGV.Group, + Version: refGV.Version, + Kind: ref.Kind, + }, + } // if owner is not namespaced then we should set the namespace to the empty mapping, err := e.mapper.RESTMapping(e.groupKind, refGV.Version) diff --git a/pkg/reconcile/reconcile.go b/pkg/reconcile/reconcile.go index b2159c531f..25b4ad396e 100644 --- a/pkg/reconcile/reconcile.go +++ b/pkg/reconcile/reconcile.go @@ -20,6 +20,7 @@ import ( "context" "time" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" ) @@ -47,6 +48,7 @@ func (r *Result) IsZero() bool { type Request struct { // NamespacedName is the name and namespace of the object to reconcile. types.NamespacedName + schema.GroupVersionKind } /*