Skip to content

Commit e1bf90b

Browse files
committed
Move reconciling volume snapshots into separate func
1 parent c7bdfe6 commit e1bf90b

File tree

1 file changed

+40
-42
lines changed

1 file changed

+40
-42
lines changed

pkg/snapshot/controller.go

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
corev1 "k8s.io/api/core/v1"
1717
kerrors "k8s.io/apimachinery/pkg/api/errors"
1818
"k8s.io/apimachinery/pkg/labels"
19+
"k8s.io/apimachinery/pkg/runtime"
1920
"k8s.io/apimachinery/pkg/types"
2021
"k8s.io/client-go/tools/record"
2122
ctrl "sigs.k8s.io/controller-runtime"
@@ -171,54 +172,19 @@ func (c *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (result ct
171172
return ctrl.Result{}, fmt.Errorf("failed to reconcile new snapshot request %s/%s: %w", configMap.Namespace, configMap.Name, err)
172173
}
173174
case RequestPhaseCreatingVolumeSnapshots:
174-
// reconcile volume snapshots
175-
volumeSnapshotsRequest := &snapshotRequest.Spec.VolumeSnapshots
176-
volumeSnapshotsStatus := &snapshotRequest.Status.VolumeSnapshots
177-
previousVolumeSnapshotsRequestPhase := volumeSnapshotsStatus.Phase
178-
err = c.volumeSnapshotter.Reconcile(ctx, &configMap, snapshotRequest.Name, volumeSnapshotsRequest, volumeSnapshotsStatus)
175+
requeueAfter, err := c.reconcileCreatingVolumeSnapshots(ctx, &configMap, snapshotRequest)
179176
if err != nil {
180-
return ctrl.Result{}, fmt.Errorf("failed to reconcile volume snapshots: %w", err)
177+
return ctrl.Result{}, fmt.Errorf("failed to reconcile volume snapshots for snapshot request %s/%s: %w", configMap.Namespace, configMap.Name, err)
181178
}
182-
183-
// check volume snapshots' status
184-
switch volumeSnapshotsStatus.Phase {
185-
case volumes.RequestPhaseInProgress:
186-
if previousVolumeSnapshotsRequestPhase == volumes.RequestPhaseNotStarted {
187-
// volume snapshots request just got initialized and moved to in-progress
188-
return ctrl.Result{
189-
RequeueAfter: 5 * time.Second,
190-
}, nil
191-
} else {
192-
// ongoing volume snapshots reconciliation, this may take some time, wait a bit before reconciling again
193-
return ctrl.Result{
194-
RequeueAfter: 30 * time.Second,
195-
}, nil
196-
}
197-
case volumes.RequestPhaseCleaningUp:
198-
if previousVolumeSnapshotsRequestPhase == volumes.RequestPhaseInProgress {
199-
// volume snapshots got created and resources should be now cleaned up
200-
return ctrl.Result{
201-
RequeueAfter: 5 * time.Second,
202-
}, nil
203-
} else {
204-
// ongoing volume snapshots cleanup in progress, wait a bit before reconciling again
205-
return ctrl.Result{
206-
RequeueAfter: 30 * time.Second,
207-
}, nil
208-
}
209-
case volumes.RequestPhasePartiallyFailed:
210-
fallthrough
211-
case volumes.RequestPhaseCompleted:
212-
snapshotRequest.Status.Phase = RequestPhaseCreatingEtcdBackup
213-
case volumes.RequestPhaseFailed:
214-
snapshotRequest.Status.Phase = RequestPhaseFailed
215-
default:
216-
return ctrl.Result{}, fmt.Errorf("unexpected volume snapshots request phase %s", volumeSnapshotsStatus.Phase)
179+
if requeueAfter > 0 {
180+
return ctrl.Result{
181+
RequeueAfter: requeueAfter,
182+
}, nil
217183
}
218184
case RequestPhaseCreatingEtcdBackup:
219185
requeue, err := c.reconcileCreatingEtcdBackup(ctx, &configMap, snapshotRequest)
220186
if err != nil {
221-
return ctrl.Result{}, fmt.Errorf("failed to reconcile in-progress snapshot request %s/%s: %w", configMap.Namespace, configMap.Name, err)
187+
return ctrl.Result{}, fmt.Errorf("failed to reconcile etcd backup creation for snapshot request %s/%s: %w", configMap.Namespace, configMap.Name, err)
222188
}
223189
if requeue {
224190
return ctrl.Result{
@@ -244,6 +210,38 @@ func (c *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (result ct
244210
return ctrl.Result{}, nil
245211
}
246212

213+
func (c *Reconciler) reconcileCreatingVolumeSnapshots(ctx context.Context, snapshotRequestObj runtime.Object, snapshotRequest *Request) (time.Duration, error) {
214+
volumeSnapshotsRequest := &snapshotRequest.Spec.VolumeSnapshots
215+
volumeSnapshotsStatus := &snapshotRequest.Status.VolumeSnapshots
216+
previousVolumeSnapshotsRequestPhase := volumeSnapshotsStatus.Phase
217+
err := c.volumeSnapshotter.Reconcile(ctx, snapshotRequestObj, snapshotRequest.Name, volumeSnapshotsRequest, volumeSnapshotsStatus)
218+
if err != nil {
219+
return 0, fmt.Errorf("failed to reconcile volume snapshots: %w", err)
220+
}
221+
222+
// check volume snapshots' status
223+
switch volumeSnapshotsStatus.Phase {
224+
case volumes.RequestPhaseInProgress:
225+
if previousVolumeSnapshotsRequestPhase == volumes.RequestPhaseNotStarted {
226+
// volume snapshots request just got initialized and moved to in-progress
227+
return 5 * time.Second, nil
228+
} else {
229+
// ongoing volume snapshots reconciliation, this may take some time, wait a bit before reconciling again
230+
return 30 * time.Second, nil
231+
}
232+
case volumes.RequestPhasePartiallyFailed:
233+
fallthrough
234+
case volumes.RequestPhaseCompleted:
235+
snapshotRequest.Status.Phase = RequestPhaseCreatingEtcdBackup
236+
case volumes.RequestPhaseFailed:
237+
snapshotRequest.Status.Phase = RequestPhaseFailed
238+
default:
239+
return 0, fmt.Errorf("unexpected volume snapshots request phase %s", volumeSnapshotsStatus.Phase)
240+
}
241+
242+
return 0, nil
243+
}
244+
247245
func (c *Reconciler) Register() error {
248246
isVolumeSnapshotsConfig := predicate.NewPredicateFuncs(func(obj client.Object) bool {
249247
if obj.GetNamespace() != c.getRequestNamespace() {

0 commit comments

Comments
 (0)