From df29e2a20aba4bd711efd12309a7656b2c1aa688 Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Tue, 20 Sep 2022 15:43:09 -0700 Subject: [PATCH] Avoid second lister fetch during finalizer reconciliation. (#2596) I noticed that the finalizer manipulation code was performing a second fetch of the resource from the lister cache to determine the differences in finalizers when the finalizers are being modify immediately above each callsite. This changes both call sites to simply pass through the "desired finalizers" as a new parameter (instead of assigning them), which lets us use the unmodified resource and avoid the redundant lister cache fetch. --- .../v1/customresourcedefinition/reconciler.go | 21 +++------------ .../customresourcedefinition/reconciler.go | 21 +++------------ .../reconciler.go | 21 +++------------ .../reconciler.go | 21 +++------------ .../reconciler.go | 21 +++------------ .../reconciler.go | 21 +++------------ .../apps/v1/deployment/reconciler.go | 21 +++------------ .../apps/v1beta1/deployment/reconciler.go | 21 +++------------ .../apps/v1beta2/deployment/reconciler.go | 21 +++------------ .../reconciler/batch/v1/cronjob/reconciler.go | 21 +++------------ .../batch/v1beta1/cronjob/reconciler.go | 21 +++------------ .../core/v1/configmap/reconciler.go | 21 +++------------ .../core/v1/namespace/reconciler.go | 21 +++------------ .../reconciler/core/v1/node/reconciler.go | 21 +++------------ .../kube/reconciler/core/v1/pod/reconciler.go | 21 +++------------ .../reconciler/core/v1/secret/reconciler.go | 21 +++------------ .../v1beta1/deployment/reconciler.go | 21 +++------------ .../v1beta1/networkpolicy/reconciler.go | 21 +++------------ .../networking/v1/networkpolicy/reconciler.go | 21 +++------------ .../generators/reconciler_reconciler.go | 27 ++++++------------- 20 files changed, 84 insertions(+), 342 deletions(-) diff --git a/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go b/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go index 821412b40..886a4c7f6 100644 --- a/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go +++ b/client/injection/apiextensions/reconciler/apiextensions/v1/customresourcedefinition/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1.CustomRe // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.CustomResourceDefinition) (*v1.CustomResourceDefinition, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.CustomResourceDefinition, desiredFinalizers sets.String) (*v1.CustomResourceDefinition, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.CustomResourceDefinition, reconcileEvent reconciler.Event) (*v1.CustomResourceDefinition, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Custom finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/apiextensions/reconciler/apiextensions/v1beta1/customresourcedefinition/reconciler.go b/client/injection/apiextensions/reconciler/apiextensions/v1beta1/customresourcedefinition/reconciler.go index ea6391514..bcae76c34 100644 --- a/client/injection/apiextensions/reconciler/apiextensions/v1beta1/customresourcedefinition/reconciler.go +++ b/client/injection/apiextensions/reconciler/apiextensions/v1beta1/customresourcedefinition/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1beta1.Cus // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.CustomResourceDefinition) (*v1beta1.CustomResourceDefinition, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.CustomResourceDefinition, desiredFinalizers sets.String) (*v1beta1.CustomResourceDefinition, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.CustomResourceDefinition, reconcileEvent reconciler.Event) (*v1beta1.CustomResourceDefinition, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.C finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/admissionregistration/v1/mutatingwebhookconfiguration/reconciler.go b/client/injection/kube/reconciler/admissionregistration/v1/mutatingwebhookconfiguration/reconciler.go index 3adf31b07..136d073b1 100644 --- a/client/injection/kube/reconciler/admissionregistration/v1/mutatingwebhookconfiguration/reconciler.go +++ b/client/injection/kube/reconciler/admissionregistration/v1/mutatingwebhookconfiguration/reconciler.go @@ -271,23 +271,14 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.MutatingWebhookConfiguration) (*v1.MutatingWebhookConfiguration, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.MutatingWebhookConfiguration, desiredFinalizers sets.String) (*v1.MutatingWebhookConfiguration, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -344,10 +335,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.MutatingWebhookConfiguration, reconcileEvent reconciler.Event) (*v1.MutatingWebhookConfiguration, error) { @@ -371,8 +360,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Mutati finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/admissionregistration/v1/validatingwebhookconfiguration/reconciler.go b/client/injection/kube/reconciler/admissionregistration/v1/validatingwebhookconfiguration/reconciler.go index 66012c933..b3ac24f05 100644 --- a/client/injection/kube/reconciler/admissionregistration/v1/validatingwebhookconfiguration/reconciler.go +++ b/client/injection/kube/reconciler/admissionregistration/v1/validatingwebhookconfiguration/reconciler.go @@ -271,23 +271,14 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.ValidatingWebhookConfiguration) (*v1.ValidatingWebhookConfiguration, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.ValidatingWebhookConfiguration, desiredFinalizers sets.String) (*v1.ValidatingWebhookConfiguration, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -344,10 +335,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.ValidatingWebhookConfiguration, reconcileEvent reconciler.Event) (*v1.ValidatingWebhookConfiguration, error) { @@ -371,8 +360,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Valida finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/admissionregistration/v1beta1/mutatingwebhookconfiguration/reconciler.go b/client/injection/kube/reconciler/admissionregistration/v1beta1/mutatingwebhookconfiguration/reconciler.go index 68927c411..df0ae452c 100644 --- a/client/injection/kube/reconciler/admissionregistration/v1beta1/mutatingwebhookconfiguration/reconciler.go +++ b/client/injection/kube/reconciler/admissionregistration/v1beta1/mutatingwebhookconfiguration/reconciler.go @@ -271,23 +271,14 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.MutatingWebhookConfiguration) (*v1beta1.MutatingWebhookConfiguration, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.MutatingWebhookConfiguration, desiredFinalizers sets.String) (*v1beta1.MutatingWebhookConfiguration, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -344,10 +335,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.MutatingWebhookConfiguration, reconcileEvent reconciler.Event) (*v1beta1.MutatingWebhookConfiguration, error) { @@ -371,8 +360,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.M finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/admissionregistration/v1beta1/validatingwebhookconfiguration/reconciler.go b/client/injection/kube/reconciler/admissionregistration/v1beta1/validatingwebhookconfiguration/reconciler.go index 1b1708192..c1407f2a8 100644 --- a/client/injection/kube/reconciler/admissionregistration/v1beta1/validatingwebhookconfiguration/reconciler.go +++ b/client/injection/kube/reconciler/admissionregistration/v1beta1/validatingwebhookconfiguration/reconciler.go @@ -271,23 +271,14 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.ValidatingWebhookConfiguration) (*v1beta1.ValidatingWebhookConfiguration, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.ValidatingWebhookConfiguration, desiredFinalizers sets.String) (*v1beta1.ValidatingWebhookConfiguration, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -344,10 +335,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.ValidatingWebhookConfiguration, reconcileEvent reconciler.Event) (*v1beta1.ValidatingWebhookConfiguration, error) { @@ -371,8 +360,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.V finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/apps/v1/deployment/reconciler.go b/client/injection/kube/reconciler/apps/v1/deployment/reconciler.go index aa4cc8616..7c923df85 100644 --- a/client/injection/kube/reconciler/apps/v1/deployment/reconciler.go +++ b/client/injection/kube/reconciler/apps/v1/deployment/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1.Deployme // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Deployment) (*v1.Deployment, error) { - - getter := r.Lister.Deployments(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Deployment, desiredFinalizers sets.String) (*v1.Deployment, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Deployment, reconcileEvent reconciler.Event) (*v1.Deployment, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Deploy finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/apps/v1beta1/deployment/reconciler.go b/client/injection/kube/reconciler/apps/v1beta1/deployment/reconciler.go index 167578321..ec162a0cf 100644 --- a/client/injection/kube/reconciler/apps/v1beta1/deployment/reconciler.go +++ b/client/injection/kube/reconciler/apps/v1beta1/deployment/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1beta1.Dep // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.Deployment) (*v1beta1.Deployment, error) { - - getter := r.Lister.Deployments(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.Deployment, desiredFinalizers sets.String) (*v1beta1.Deployment, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.Deployment, reconcileEvent reconciler.Event) (*v1beta1.Deployment, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.D finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/apps/v1beta2/deployment/reconciler.go b/client/injection/kube/reconciler/apps/v1beta2/deployment/reconciler.go index 51ed09f5d..8182f316d 100644 --- a/client/injection/kube/reconciler/apps/v1beta2/deployment/reconciler.go +++ b/client/injection/kube/reconciler/apps/v1beta2/deployment/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1beta2.Dep // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta2.Deployment) (*v1beta2.Deployment, error) { - - getter := r.Lister.Deployments(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta2.Deployment, desiredFinalizers sets.String) (*v1beta2.Deployment, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta2.Deployment, reconcileEvent reconciler.Event) (*v1beta2.Deployment, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta2.D finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/batch/v1/cronjob/reconciler.go b/client/injection/kube/reconciler/batch/v1/cronjob/reconciler.go index eb20ebc69..3289b7d69 100644 --- a/client/injection/kube/reconciler/batch/v1/cronjob/reconciler.go +++ b/client/injection/kube/reconciler/batch/v1/cronjob/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1.CronJob, // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.CronJob) (*v1.CronJob, error) { - - getter := r.Lister.CronJobs(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.CronJob, desiredFinalizers sets.String) (*v1.CronJob, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.CronJob, reconcileEvent reconciler.Event) (*v1.CronJob, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.CronJo finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/batch/v1beta1/cronjob/reconciler.go b/client/injection/kube/reconciler/batch/v1beta1/cronjob/reconciler.go index b28893e6c..1f791e1cd 100644 --- a/client/injection/kube/reconciler/batch/v1beta1/cronjob/reconciler.go +++ b/client/injection/kube/reconciler/batch/v1beta1/cronjob/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1beta1.Cro // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.CronJob) (*v1beta1.CronJob, error) { - - getter := r.Lister.CronJobs(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.CronJob, desiredFinalizers sets.String) (*v1beta1.CronJob, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.CronJob, reconcileEvent reconciler.Event) (*v1beta1.CronJob, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.C finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/core/v1/configmap/reconciler.go b/client/injection/kube/reconciler/core/v1/configmap/reconciler.go index 02a102fb9..f6f21f73c 100644 --- a/client/injection/kube/reconciler/core/v1/configmap/reconciler.go +++ b/client/injection/kube/reconciler/core/v1/configmap/reconciler.go @@ -270,23 +270,14 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.ConfigMap) (*v1.ConfigMap, error) { - - getter := r.Lister.ConfigMaps(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.ConfigMap, desiredFinalizers sets.String) (*v1.ConfigMap, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -343,10 +334,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.ConfigMap, reconcileEvent reconciler.Event) (*v1.ConfigMap, error) { @@ -370,8 +359,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Config finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/core/v1/namespace/reconciler.go b/client/injection/kube/reconciler/core/v1/namespace/reconciler.go index 81593df43..58cbc2eec 100644 --- a/client/injection/kube/reconciler/core/v1/namespace/reconciler.go +++ b/client/injection/kube/reconciler/core/v1/namespace/reconciler.go @@ -334,23 +334,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1.Namespac // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Namespace) (*v1.Namespace, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Namespace, desiredFinalizers sets.String) (*v1.Namespace, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -407,10 +398,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Namespace, reconcileEvent reconciler.Event) (*v1.Namespace, error) { @@ -434,8 +423,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Namesp finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/core/v1/node/reconciler.go b/client/injection/kube/reconciler/core/v1/node/reconciler.go index f36345945..c158189f5 100644 --- a/client/injection/kube/reconciler/core/v1/node/reconciler.go +++ b/client/injection/kube/reconciler/core/v1/node/reconciler.go @@ -334,23 +334,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1.Node, de // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Node) (*v1.Node, error) { - - getter := r.Lister - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Node, desiredFinalizers sets.String) (*v1.Node, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -407,10 +398,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Node, reconcileEvent reconciler.Event) (*v1.Node, error) { @@ -434,8 +423,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Node, finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/core/v1/pod/reconciler.go b/client/injection/kube/reconciler/core/v1/pod/reconciler.go index 048744d16..d81cc9dc4 100644 --- a/client/injection/kube/reconciler/core/v1/pod/reconciler.go +++ b/client/injection/kube/reconciler/core/v1/pod/reconciler.go @@ -334,23 +334,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1.Pod, des // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Pod) (*v1.Pod, error) { - - getter := r.Lister.Pods(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Pod, desiredFinalizers sets.String) (*v1.Pod, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -407,10 +398,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Pod, reconcileEvent reconciler.Event) (*v1.Pod, error) { @@ -434,8 +423,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Pod, r finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/core/v1/secret/reconciler.go b/client/injection/kube/reconciler/core/v1/secret/reconciler.go index 18eb75d90..cc5544a2c 100644 --- a/client/injection/kube/reconciler/core/v1/secret/reconciler.go +++ b/client/injection/kube/reconciler/core/v1/secret/reconciler.go @@ -270,23 +270,14 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, key string) error { // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Secret) (*v1.Secret, error) { - - getter := r.Lister.Secrets(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.Secret, desiredFinalizers sets.String) (*v1.Secret, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -343,10 +334,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Secret, reconcileEvent reconciler.Event) (*v1.Secret, error) { @@ -370,8 +359,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Secret finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/extensions/v1beta1/deployment/reconciler.go b/client/injection/kube/reconciler/extensions/v1beta1/deployment/reconciler.go index b9e85cc15..17327ccbe 100644 --- a/client/injection/kube/reconciler/extensions/v1beta1/deployment/reconciler.go +++ b/client/injection/kube/reconciler/extensions/v1beta1/deployment/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1beta1.Dep // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.Deployment) (*v1beta1.Deployment, error) { - - getter := r.Lister.Deployments(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.Deployment, desiredFinalizers sets.String) (*v1beta1.Deployment, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.Deployment, reconcileEvent reconciler.Event) (*v1beta1.Deployment, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.D finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/extensions/v1beta1/networkpolicy/reconciler.go b/client/injection/kube/reconciler/extensions/v1beta1/networkpolicy/reconciler.go index 08663a9eb..4e395a728 100644 --- a/client/injection/kube/reconciler/extensions/v1beta1/networkpolicy/reconciler.go +++ b/client/injection/kube/reconciler/extensions/v1beta1/networkpolicy/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1beta1.Net // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.NetworkPolicy) (*v1beta1.NetworkPolicy, error) { - - getter := r.Lister.NetworkPolicies(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1beta1.NetworkPolicy, desiredFinalizers sets.String) (*v1beta1.NetworkPolicy, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.NetworkPolicy, reconcileEvent reconciler.Event) (*v1beta1.NetworkPolicy, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1beta1.N finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/client/injection/kube/reconciler/networking/v1/networkpolicy/reconciler.go b/client/injection/kube/reconciler/networking/v1/networkpolicy/reconciler.go index 11415b2a9..a993903a2 100644 --- a/client/injection/kube/reconciler/networking/v1/networkpolicy/reconciler.go +++ b/client/injection/kube/reconciler/networking/v1/networkpolicy/reconciler.go @@ -335,23 +335,14 @@ func (r *reconcilerImpl) updateStatus(ctx context.Context, existing *v1.NetworkP // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.NetworkPolicy) (*v1.NetworkPolicy, error) { - - getter := r.Lister.NetworkPolicies(resource.Namespace) - - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx context.Context, resource *v1.NetworkPolicy, desiredFinalizers sets.String) (*v1.NetworkPolicy, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := sets.NewString(existing.Finalizers...) - desiredFinalizers := sets.NewString(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -408,10 +399,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx context.Context, resource * finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.NetworkPolicy, reconcileEvent reconciler.Event) (*v1.NetworkPolicy, error) { @@ -435,8 +424,6 @@ func (r *reconcilerImpl) clearFinalizer(ctx context.Context, resource *v1.Networ finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } diff --git a/codegen/cmd/injection-gen/generators/reconciler_reconciler.go b/codegen/cmd/injection-gen/generators/reconciler_reconciler.go index a292a24b5..28bc3185c 100644 --- a/codegen/cmd/injection-gen/generators/reconciler_reconciler.go +++ b/codegen/cmd/injection-gen/generators/reconciler_reconciler.go @@ -154,6 +154,10 @@ func (g *reconcilerReconcilerGenerator) GenerateType(c *generator.Context, t *ty Package: "k8s.io/apimachinery/pkg/util/sets", Name: "NewString", }), + "setsString": c.Universe.Type(types.Name{ + Package: "k8s.io/apimachinery/pkg/util/sets", + Name: "String", + }), "controllerOptions": c.Universe.Type(types.Name{ Package: "knative.dev/pkg/controller", Name: "Options", @@ -597,25 +601,14 @@ var reconcilerFinalizerFactory = ` // updateFinalizersFiltered will update the Finalizers of the resource. // TODO: this method could be generic and sync all finalizers. For now it only // updates defaultFinalizerName or its override. -func (r *reconcilerImpl) updateFinalizersFiltered(ctx {{.contextContext|raw}}, resource *{{.type|raw}}) (*{{.type|raw}}, error) { - {{if .nonNamespaced}} - getter := r.Lister - {{else}} - getter := r.Lister.{{.type|apiGroup}}(resource.Namespace) - {{end}} - actual, err := getter.Get(resource.Name) - if err != nil { - return resource, err - } - +func (r *reconcilerImpl) updateFinalizersFiltered(ctx {{.contextContext|raw}}, resource *{{.type|raw}}, desiredFinalizers {{.setsString|raw}}) (*{{.type|raw}}, error) { // Don't modify the informers copy. - existing := actual.DeepCopy() + existing := resource.DeepCopy() var finalizers []string // If there's nothing to update, just return. existingFinalizers := {{.setsNewString|raw}}(existing.Finalizers...) - desiredFinalizers := {{.setsNewString|raw}}(resource.Finalizers...) if desiredFinalizers.Has(r.finalizerName) { if existingFinalizers.Has(r.finalizerName) { @@ -675,10 +668,8 @@ func (r *reconcilerImpl) setFinalizerIfFinalizer(ctx {{.contextContext|raw}}, re finalizers.Insert(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } func (r *reconcilerImpl) clearFinalizer(ctx {{.contextContext|raw}}, resource *{{.type|raw}}, reconcileEvent {{.reconcilerEvent|raw}}) (*{{.type|raw}}, error) { @@ -702,10 +693,8 @@ func (r *reconcilerImpl) clearFinalizer(ctx {{.contextContext|raw}}, resource *{ finalizers.Delete(r.finalizerName) } - resource.Finalizers = finalizers.List() - // Synchronize the finalizers filtered by r.finalizerName. - return r.updateFinalizersFiltered(ctx, resource) + return r.updateFinalizersFiltered(ctx, resource, finalizers) } `