Skip to content

Commit 730f63d

Browse files
authored
Merge pull request #8949 from sbueringer/pr-optimize-add-finalizer
🐛 all: only set finalizers if deletionTimestamp is not set
2 parents 61a6667 + cef1cf1 commit 730f63d

File tree

12 files changed

+74
-56
lines changed

12 files changed

+74
-56
lines changed

controlplane/kubeadm/internal/controllers/controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,9 @@ func (r *KubeadmControlPlaneReconciler) Reconcile(ctx context.Context, req ctrl.
174174
return ctrl.Result{Requeue: true}, nil
175175
}
176176

177-
// Add finalizer first if not exist to avoid the race condition between init and delete
178-
if !controllerutil.ContainsFinalizer(kcp, controlplanev1.KubeadmControlPlaneFinalizer) {
177+
// Add finalizer first if not set to avoid the race condition between init and delete.
178+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
179+
if kcp.ObjectMeta.DeletionTimestamp.IsZero() && !controllerutil.ContainsFinalizer(kcp, controlplanev1.KubeadmControlPlaneFinalizer) {
179180
controllerutil.AddFinalizer(kcp, controlplanev1.KubeadmControlPlaneFinalizer)
180181

181182
// patch and return right away instead of reusing the main defer,

exp/addons/internal/controllers/clusterresourceset_controller.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,17 +131,18 @@ func (r *ClusterResourceSetReconciler) Reconcile(ctx context.Context, req ctrl.R
131131
return ctrl.Result{}, err
132132
}
133133

134-
// Add finalizer first if not exist to avoid the race condition between init and delete
135-
if !controllerutil.ContainsFinalizer(clusterResourceSet, addonsv1.ClusterResourceSetFinalizer) {
136-
controllerutil.AddFinalizer(clusterResourceSet, addonsv1.ClusterResourceSetFinalizer)
137-
return ctrl.Result{}, nil
138-
}
139-
140134
// Handle deletion reconciliation loop.
141135
if !clusterResourceSet.ObjectMeta.DeletionTimestamp.IsZero() {
142136
return r.reconcileDelete(ctx, clusters, clusterResourceSet)
143137
}
144138

139+
// Add finalizer first if not set to avoid the race condition between init and delete.
140+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
141+
if !controllerutil.ContainsFinalizer(clusterResourceSet, addonsv1.ClusterResourceSetFinalizer) {
142+
controllerutil.AddFinalizer(clusterResourceSet, addonsv1.ClusterResourceSetFinalizer)
143+
return ctrl.Result{}, nil
144+
}
145+
145146
errs := []error{}
146147
errClusterLockedOccurred := false
147148
for _, cluster := range clusters {

exp/internal/controllers/machinepool_controller.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,6 @@ func (r *MachinePoolReconciler) Reconcile(ctx context.Context, req ctrl.Request)
181181
}
182182
mp.Labels[clusterv1.ClusterNameLabel] = mp.Spec.ClusterName
183183

184-
// Add finalizer first if not exist to avoid the race condition between init and delete
185-
if !controllerutil.ContainsFinalizer(mp, expv1.MachinePoolFinalizer) {
186-
controllerutil.AddFinalizer(mp, expv1.MachinePoolFinalizer)
187-
return ctrl.Result{}, nil
188-
}
189-
190184
// Handle deletion reconciliation loop.
191185
if !mp.ObjectMeta.DeletionTimestamp.IsZero() {
192186
res, err := r.reconcileDelete(ctx, cluster, mp)
@@ -199,6 +193,13 @@ func (r *MachinePoolReconciler) Reconcile(ctx context.Context, req ctrl.Request)
199193
return res, err
200194
}
201195

196+
// Add finalizer first if not set to avoid the race condition between init and delete.
197+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
198+
if !controllerutil.ContainsFinalizer(mp, expv1.MachinePoolFinalizer) {
199+
controllerutil.AddFinalizer(mp, expv1.MachinePoolFinalizer)
200+
return ctrl.Result{}, nil
201+
}
202+
202203
// Handle normal reconciliation loop.
203204
res, err := r.reconcile(ctx, cluster, mp)
204205
// Requeue if the reconcile failed because the ClusterCacheTracker was locked for

internal/controllers/cluster/cluster_controller.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,17 +142,18 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Re
142142
}
143143
}()
144144

145-
// Add finalizer first if not exist to avoid the race condition between init and delete
146-
if !controllerutil.ContainsFinalizer(cluster, clusterv1.ClusterFinalizer) {
147-
controllerutil.AddFinalizer(cluster, clusterv1.ClusterFinalizer)
148-
return ctrl.Result{}, nil
149-
}
150-
151145
// Handle deletion reconciliation loop.
152146
if !cluster.ObjectMeta.DeletionTimestamp.IsZero() {
153147
return r.reconcileDelete(ctx, cluster)
154148
}
155149

150+
// Add finalizer first if not set to avoid the race condition between init and delete.
151+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
152+
if !controllerutil.ContainsFinalizer(cluster, clusterv1.ClusterFinalizer) {
153+
controllerutil.AddFinalizer(cluster, clusterv1.ClusterFinalizer)
154+
return ctrl.Result{}, nil
155+
}
156+
156157
// Handle normal reconciliation loop.
157158
return r.reconcile(ctx, cluster)
158159
}

internal/controllers/machine/machine_controller.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Re
195195
}
196196
m.Labels[clusterv1.ClusterNameLabel] = m.Spec.ClusterName
197197

198-
// Add finalizer first if not exist to avoid the race condition between init and delete
199-
if !controllerutil.ContainsFinalizer(m, clusterv1.MachineFinalizer) {
200-
controllerutil.AddFinalizer(m, clusterv1.MachineFinalizer)
201-
return ctrl.Result{}, nil
202-
}
203-
204198
// Handle deletion reconciliation loop.
205199
if !m.ObjectMeta.DeletionTimestamp.IsZero() {
206200
res, err := r.reconcileDelete(ctx, cluster, m)
@@ -213,6 +207,13 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Re
213207
return res, err
214208
}
215209

210+
// Add finalizer first if not set to avoid the race condition between init and delete.
211+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
212+
if !controllerutil.ContainsFinalizer(m, clusterv1.MachineFinalizer) {
213+
controllerutil.AddFinalizer(m, clusterv1.MachineFinalizer)
214+
return ctrl.Result{}, nil
215+
}
216+
216217
// Handle normal reconciliation loop.
217218
res, err := r.reconcile(ctx, cluster, m)
218219
// Requeue if the reconcile failed because the ClusterCacheTracker was locked for

internal/controllers/topology/machinedeployment/machinedeployment_controller.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Re
129129
return r.reconcileDelete(ctx, md)
130130
}
131131

132-
// If the MachineDeployment is not being deleted ensure the finalizer is set.
133-
controllerutil.AddFinalizer(md, clusterv1.MachineDeploymentTopologyFinalizer)
132+
// Add finalizer first if not set to avoid the race condition between init and delete.
133+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
134+
if !controllerutil.ContainsFinalizer(md, clusterv1.MachineDeploymentTopologyFinalizer) {
135+
controllerutil.AddFinalizer(md, clusterv1.MachineDeploymentTopologyFinalizer)
136+
return ctrl.Result{}, nil
137+
}
134138

135139
return ctrl.Result{}, nil
136140
}

internal/controllers/topology/machineset/machineset_controller.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Re
136136
return r.reconcileDelete(ctx, ms)
137137
}
138138

139-
// If the MachineSet is not being deleted ensure the finalizer is set.
140-
controllerutil.AddFinalizer(ms, clusterv1.MachineSetTopologyFinalizer)
139+
// Add finalizer first if not set to avoid the race condition between init and delete.
140+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
141+
if !controllerutil.ContainsFinalizer(ms, clusterv1.MachineSetTopologyFinalizer) {
142+
controllerutil.AddFinalizer(ms, clusterv1.MachineSetTopologyFinalizer)
143+
return ctrl.Result{}, nil
144+
}
141145

142146
return ctrl.Result{}, nil
143147
}

test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,18 @@ func (r *DockerMachinePoolReconciler) Reconcile(ctx context.Context, req ctrl.Re
119119
}
120120
}()
121121

122-
// Add finalizer first if not exist to avoid the race condition between init and delete
123-
if !controllerutil.ContainsFinalizer(dockerMachinePool, infraexpv1.MachinePoolFinalizer) {
124-
controllerutil.AddFinalizer(dockerMachinePool, infraexpv1.MachinePoolFinalizer)
125-
return ctrl.Result{}, nil
126-
}
127-
128122
// Handle deleted machines
129123
if !dockerMachinePool.ObjectMeta.DeletionTimestamp.IsZero() {
130124
return r.reconcileDelete(ctx, cluster, machinePool, dockerMachinePool)
131125
}
132126

127+
// Add finalizer first if not set to avoid the race condition between init and delete.
128+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
129+
if !controllerutil.ContainsFinalizer(dockerMachinePool, infraexpv1.MachinePoolFinalizer) {
130+
controllerutil.AddFinalizer(dockerMachinePool, infraexpv1.MachinePoolFinalizer)
131+
return ctrl.Result{}, nil
132+
}
133+
133134
// Handle non-deleted machines
134135
res, err = r.reconcileNormal(ctx, cluster, machinePool, dockerMachinePool)
135136
// Requeue if the reconcile failed because the ClusterCacheTracker was locked for

test/infrastructure/docker/internal/controllers/dockercluster_controller.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,17 +106,18 @@ func (r *DockerClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reques
106106
// In the case of Docker, failure domains don't mean much so we simply copy the Spec into the Status.
107107
dockerCluster.Status.FailureDomains = dockerCluster.Spec.FailureDomains
108108

109-
// Add finalizer first if not exist to avoid the race condition between init and delete
110-
if !controllerutil.ContainsFinalizer(dockerCluster, infrav1.ClusterFinalizer) {
111-
controllerutil.AddFinalizer(dockerCluster, infrav1.ClusterFinalizer)
112-
return ctrl.Result{}, nil
113-
}
114-
115109
// Handle deleted clusters
116110
if !dockerCluster.DeletionTimestamp.IsZero() {
117111
return r.reconcileDelete(ctx, dockerCluster, externalLoadBalancer)
118112
}
119113

114+
// Add finalizer first if not set to avoid the race condition between init and delete.
115+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
116+
if !controllerutil.ContainsFinalizer(dockerCluster, infrav1.ClusterFinalizer) {
117+
controllerutil.AddFinalizer(dockerCluster, infrav1.ClusterFinalizer)
118+
return ctrl.Result{}, nil
119+
}
120+
120121
// Handle non-deleted clusters
121122
return r.reconcileNormal(ctx, dockerCluster, externalLoadBalancer)
122123
}

test/infrastructure/docker/internal/controllers/dockermachine_controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,9 @@ func (r *DockerMachineReconciler) Reconcile(ctx context.Context, req ctrl.Reques
143143
}
144144
}()
145145

146-
// Add finalizer first if not exist to avoid the race condition between init and delete
147-
if !controllerutil.ContainsFinalizer(dockerMachine, infrav1.MachineFinalizer) {
146+
// Add finalizer first if not set to avoid the race condition between init and delete.
147+
// Note: Finalizers in general can only be added when the deletionTimestamp is not set.
148+
if dockerMachine.ObjectMeta.DeletionTimestamp.IsZero() && !controllerutil.ContainsFinalizer(dockerMachine, infrav1.MachineFinalizer) {
148149
controllerutil.AddFinalizer(dockerMachine, infrav1.MachineFinalizer)
149150
return ctrl.Result{}, nil
150151
}

0 commit comments

Comments
 (0)