Skip to content

Commit 856ae16

Browse files
committed
Added comments and TODOs wherever applicable
1 parent 903fd7f commit 856ae16

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

pkg/syncer/cnsoperator/controller/cnsunregistervolume/controller.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ var (
164164
removeFinalizerFromPVC = k8s.RemoveFinalizerFromPVC
165165
)
166166

167+
// TODO: find a way to optimise the logger usage in this file.
168+
167169
// Reconcile reads that state of the cluster for a Reconciler object
168170
// and makes changes based on the state read and what is in the
169171
// Reconciler.Spec.
@@ -194,6 +196,9 @@ func (r *Reconciler) Reconcile(ctx context.Context,
194196
log.Info("finished reconciling instance")
195197
}()
196198

199+
// Handle deletion of the instance.
200+
// The finalizer will be removed only if the volume is unregistered
201+
// or if the input parameters are invalid or if the volume is in use.
197202
if instance.DeletionTimestamp != nil {
198203
log.Info("instance is marked for deletion")
199204
err = r.reconcileDelete(ctx, *instance, request)
@@ -220,12 +225,6 @@ func (r *Reconciler) Reconcile(ctx context.Context,
220225
return reconcile.Result{}, nil
221226
}
222227

223-
err = protectInstance(ctx, r.client, instance)
224-
if err != nil {
225-
log.Error("failed to protect instance with error ", err)
226-
return reconcile.Result{}, err
227-
}
228-
229228
err = r.reconcile(ctx, instance, request)
230229
if err != nil {
231230
log.Error("failed to reconcile with error ", err)
@@ -256,6 +255,14 @@ func (r *Reconciler) reconcile(ctx context.Context,
256255
return err
257256
}
258257

258+
// Only protect the instance if input parameters are valid.
259+
// This ensures faster deletion of instances with invalid parameters.
260+
err = protectInstance(ctx, r.client, instance)
261+
if err != nil {
262+
log.Error("failed to protect instance with error ", err)
263+
return err
264+
}
265+
259266
usageInfo, err := getVolumeUsageInfo(ctx, params.pvcName, params.namespace,
260267
instance.Spec.ForceUnregister)
261268
if err != nil {
@@ -269,7 +276,7 @@ func (r *Reconciler) reconcile(ctx context.Context,
269276
return errors.New(msg)
270277
}
271278

272-
err = unregisterVolume(ctx, *r, request, *params)
279+
err = unregisterVolume(ctx, r.volumeManager, request, *params)
273280
if err != nil {
274281
log.Error("failed to unregister volume with error ", err)
275282
return err
@@ -315,7 +322,11 @@ func (r *Reconciler) reconcileDelete(ctx context.Context,
315322
return nil
316323
}
317324

318-
err = unregisterVolume(ctx, *r, request, *params)
325+
// Try to unregister the volume. This ensures that the system remains
326+
// consistent and the volume is not left in an unusable state.
327+
// If unregistration fails, the instance will be re-queued for
328+
// reconciliation.
329+
err = unregisterVolume(ctx, r.volumeManager, request, *params)
319330
if err != nil {
320331
log.Error("failed to unregister volume with error ", err)
321332
return err
@@ -325,7 +336,7 @@ func (r *Reconciler) reconcileDelete(ctx context.Context,
325336
return nil
326337
}
327338

328-
func unregisterVolume(ctx context.Context, r Reconciler,
339+
func unregisterVolume(ctx context.Context, volMgr volumes.Manager,
329340
request reconcile.Request, params params) error {
330341
log := logger.GetLogger(ctx).With("name", request.NamespacedName)
331342

@@ -355,7 +366,7 @@ func unregisterVolume(ctx context.Context, r Reconciler,
355366
}
356367

357368
unregDisk := !params.retainFCD // If retainFCD is false, unregister the FCD too.
358-
err = r.volumeManager.UnregisterVolume(ctx, params.volumeID, unregDisk)
369+
err = volMgr.UnregisterVolume(ctx, params.volumeID, unregDisk)
359370
if err != nil {
360371
log.Error("failed to unregister volume with error ", err)
361372
return errors.New("failed to unregister volume")

pkg/syncer/cnsoperator/controller/cnsunregistervolume/controller_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ import (
4343
cnsoptypes "sigs.k8s.io/vsphere-csi-driver/v3/pkg/syncer/cnsoperator/types"
4444
)
4545

46+
// TODO: update tests
47+
4648
func TestReconciler_Reconcile(t *testing.T) {
4749
// function overrides
4850
newK8sClientOriginal := newK8sClient
@@ -280,7 +282,7 @@ func TestReconciler_Reconcile(t *testing.T) {
280282
errMsg := "failed to get volume usage info"
281283
instance := newInstance(tt, "mock-instance", "mock-namespace", "mock-volume-id", "", "",
282284
nil, false, false, false, false)
283-
getVolumeUsageInfo = func(ctx context.Context, k8sClient kubernetes.Interface, pvcName string,
285+
getVolumeUsageInfo = func(ctx context.Context, pvcName string,
284286
pvcNamespace string, ignoreVMUsage bool) (*volumeUsageInfo, error) {
285287
return nil, errors.New(errMsg)
286288
}
@@ -306,7 +308,7 @@ func TestReconciler_Reconcile(t *testing.T) {
306308
}
307309
instance := newInstance(tt, "mock-instance", "mock-namespace", "mock-volume-id", "", "",
308310
nil, false, false, false, false)
309-
getVolumeUsageInfo = func(ctx context.Context, k8sClient kubernetes.Interface, pvcName string,
311+
getVolumeUsageInfo = func(ctx context.Context, pvcName string,
310312
pvcNamespace string, ignoreVMUsage bool) (*volumeUsageInfo, error) {
311313
return usageInfo, nil
312314
}
@@ -323,7 +325,7 @@ func TestReconciler_Reconcile(t *testing.T) {
323325
assertUtil(tt, reconciler, request, res, err, true, time.Second, true, "", usageInfo.String(), expStatus)
324326
})
325327

326-
getVolumeUsageInfo = func(ctx context.Context, k8sClient kubernetes.Interface, pvcName string,
328+
getVolumeUsageInfo = func(ctx context.Context, pvcName string,
327329
pvcNamespace string, ignoreVMUsage bool) (*volumeUsageInfo, error) {
328330
return &volumeUsageInfo{}, nil
329331
}

0 commit comments

Comments
 (0)