Skip to content

Commit ea2812b

Browse files
committed
fix reconcile (#410)
Signed-off-by: Lipovsky, Tomas <[email protected]>
1 parent 28d1f69 commit ea2812b

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

controllers/zookeepercluster_controller.go

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5052
var _ reconcile.Reconciler = &ZookeeperClusterReconciler{}
5153

54+
var ErrFinalizerDone = errors.New("finalizer already done")
55+
5256
// ZookeeperClusterReconciler reconciles a ZookeeperCluster object
5357
type 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

700710
func (r *ZookeeperClusterReconciler) getPVCCount(instance *zookeeperv1beta1.ZookeeperCluster) (pvcCount int, err error) {

controllers/zookeepercluster_controller_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,11 +603,17 @@ var _ = Describe("ZookeeperCluster Controller", func() {
603603
now := metav1.Now()
604604
z.SetDeletionTimestamp(&now)
605605
cl.Update(context.TODO(), z)
606-
err = r.reconcileFinalizers(z)
607606
})
608607
It("should not raise an error", func() {
608+
err = r.reconcileFinalizers(z)
609609
Ω(err).To(BeNil())
610610
})
611+
It("should not raise an error", func() {
612+
z.Spec.Persistence.VolumeReclaimPolicy = v1beta1.VolumeReclaimPolicyDelete
613+
cl.Update(context.TODO(), z)
614+
err = r.reconcileFinalizers(z)
615+
Ω(err.Error()).To(Equal("finalizer already done, do not continue reconcile"))
616+
})
611617
})
612618

613619
Context("reconcileFinalizers", func() {

0 commit comments

Comments
 (0)