@@ -15,6 +15,8 @@ import (
1515 "strconv"
1616 "time"
1717
18+ "errors"
19+
1820 "k8s.io/client-go/kubernetes/scheme"
1921 "sigs.k8s.io/controller-runtime/pkg/client/fake"
2022 "sigs.k8s.io/controller-runtime/pkg/predicate"
@@ -28,7 +30,7 @@ import (
2830 appsv1 "k8s.io/api/apps/v1"
2931 corev1 "k8s.io/api/core/v1"
3032 policyv1 "k8s.io/api/policy/v1"
31- "k8s.io/apimachinery/pkg/api/errors"
33+ kerrors "k8s.io/apimachinery/pkg/api/errors"
3234 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3335 "k8s.io/apimachinery/pkg/labels"
3436 "k8s.io/apimachinery/pkg/runtime"
@@ -49,6 +51,8 @@ var log = logf.Log.WithName("controller_zookeepercluster")
4951
5052var _ reconcile.Reconciler = & ZookeeperClusterReconciler {}
5153
54+ var ErrFinalizerDone = errors .New ("finalizer already done" )
55+
5256// ZookeeperClusterReconciler reconciles a ZookeeperCluster object
5357type ZookeeperClusterReconciler struct {
5458 Client client.Client
@@ -72,7 +76,7 @@ func (r *ZookeeperClusterReconciler) Reconcile(_ context.Context, request ctrl.R
7276 instance := & zookeeperv1beta1.ZookeeperCluster {}
7377 err := r .Client .Get (context .TODO (), request .NamespacedName , instance )
7478 if err != nil {
75- if errors .IsNotFound (err ) {
79+ if kerrors .IsNotFound (err ) {
7680 // Request object not found, could have been deleted after reconcile
7781 // request. Owned objects are automatically garbage collected. For
7882 // additional cleanup logic use finalizers.
@@ -100,8 +104,14 @@ func (r *ZookeeperClusterReconciler) Reconcile(_ context.Context, request ctrl.R
100104 }
101105 return reconcile.Result {Requeue : true }, nil
102106 }
107+ if err := r .reconcileFinalizers (instance ); err != nil {
108+ if errors .Is (err , ErrFinalizerDone ) {
109+ err = nil
110+ }
111+ return reconcile.Result {}, err
112+ }
113+
103114 for _ , fun := range []reconcileFun {
104- r .reconcileFinalizers ,
105115 r .reconcileConfigMap ,
106116 r .reconcileStatefulSet ,
107117 r .reconcileClientService ,
@@ -171,7 +181,7 @@ func (r *ZookeeperClusterReconciler) reconcileStatefulSet(instance *zookeeperv1b
171181 // Check if this ServiceAccount already exists
172182 foundServiceAccount := & corev1.ServiceAccount {}
173183 err = r .Client .Get (context .TODO (), types.NamespacedName {Name : serviceAccount .Name , Namespace : serviceAccount .Namespace }, foundServiceAccount )
174- if err != nil && errors .IsNotFound (err ) {
184+ if err != nil && kerrors .IsNotFound (err ) {
175185 r .Log .Info ("Creating a new ServiceAccount" , "ServiceAccount.Namespace" , serviceAccount .Namespace , "ServiceAccount.Name" , serviceAccount .Name )
176186 err = r .Client .Create (context .TODO (), serviceAccount )
177187 if err != nil {
@@ -197,7 +207,7 @@ func (r *ZookeeperClusterReconciler) reconcileStatefulSet(instance *zookeeperv1b
197207 Name : sts .Name ,
198208 Namespace : sts .Namespace ,
199209 }, foundSts )
200- if err != nil && errors .IsNotFound (err ) {
210+ if err != nil && kerrors .IsNotFound (err ) {
201211 r .Log .Info ("Creating a new Zookeeper StatefulSet" ,
202212 "StatefulSet.Namespace" , sts .Namespace ,
203213 "StatefulSet.Name" , sts .Name )
@@ -359,7 +369,7 @@ func (r *ZookeeperClusterReconciler) reconcileClientService(instance *zookeeperv
359369 Name : svc .Name ,
360370 Namespace : svc .Namespace ,
361371 }, foundSvc )
362- if err != nil && errors .IsNotFound (err ) {
372+ if err != nil && kerrors .IsNotFound (err ) {
363373 r .Log .Info ("Creating new client service" ,
364374 "Service.Namespace" , svc .Namespace ,
365375 "Service.Name" , svc .Name )
@@ -406,7 +416,7 @@ func (r *ZookeeperClusterReconciler) reconcileHeadlessService(instance *zookeepe
406416 Name : svc .Name ,
407417 Namespace : svc .Namespace ,
408418 }, foundSvc )
409- if err != nil && errors .IsNotFound (err ) {
419+ if err != nil && kerrors .IsNotFound (err ) {
410420 r .Log .Info ("Creating new headless service" ,
411421 "Service.Namespace" , svc .Namespace ,
412422 "Service.Name" , svc .Name )
@@ -440,7 +450,7 @@ func (r *ZookeeperClusterReconciler) reconcileAdminServerService(instance *zooke
440450 Name : svc .Name ,
441451 Namespace : svc .Namespace ,
442452 }, foundSvc )
443- if err != nil && errors .IsNotFound (err ) {
453+ if err != nil && kerrors .IsNotFound (err ) {
444454 r .Log .Info ("Creating admin server service" ,
445455 "Service.Namespace" , svc .Namespace ,
446456 "Service.Name" , svc .Name )
@@ -474,7 +484,7 @@ func (r *ZookeeperClusterReconciler) reconcilePodDisruptionBudget(instance *zook
474484 Name : pdb .Name ,
475485 Namespace : pdb .Namespace ,
476486 }, foundPdb )
477- if err != nil && errors .IsNotFound (err ) {
487+ if err != nil && kerrors .IsNotFound (err ) {
478488 r .Log .Info ("Creating new pod-disruption-budget" ,
479489 "PodDisruptionBudget.Namespace" , pdb .Namespace ,
480490 "PodDisruptionBudget.Name" , pdb .Name )
@@ -499,7 +509,7 @@ func (r *ZookeeperClusterReconciler) reconcileConfigMap(instance *zookeeperv1bet
499509 Name : cm .Name ,
500510 Namespace : cm .Namespace ,
501511 }, foundCm )
502- if err != nil && errors .IsNotFound (err ) {
512+ if err != nil && kerrors .IsNotFound (err ) {
503513 r .Log .Info ("Creating a new Zookeeper Config Map" ,
504514 "ConfigMap.Namespace" , cm .Namespace ,
505515 "ConfigMap.Name" , cm .Name )
@@ -694,7 +704,7 @@ func (r *ZookeeperClusterReconciler) reconcileFinalizers(instance *zookeeperv1be
694704 }
695705 }
696706 }
697- return nil
707+ return fmt . Errorf ( "%w, do not continue reconcile" , ErrFinalizerDone )
698708}
699709
700710func (r * ZookeeperClusterReconciler ) getPVCCount (instance * zookeeperv1beta1.ZookeeperCluster ) (pvcCount int , err error ) {
0 commit comments