Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (

const (
clusterExtensionRevisionTeardownFinalizer = "olm.operatorframework.io/teardown"
defaultRequeueAfter = 10 * time.Second
)

// ClusterExtensionRevisionReconciler actions individual snapshots of ClusterExtensions,
Expand Down Expand Up @@ -186,14 +187,14 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, cer
if verr := rres.GetValidationError(); verr != nil {
l.Error(fmt.Errorf("%w", verr), "preflight validation failed, retrying after 10s")
setRetryingConditions(cer, fmt.Sprintf("revision validation error: %s", verr))
return ctrl.Result{RequeueAfter: 10 * time.Second}, nil
return ctrl.Result{RequeueAfter: defaultRequeueAfter}, nil
}

for i, pres := range rres.GetPhases() {
if verr := pres.GetValidationError(); verr != nil {
l.Error(fmt.Errorf("%w", verr), "phase preflight validation failed, retrying after 10s", "phase", i)
setRetryingConditions(cer, fmt.Sprintf("phase %d validation error: %s", i, verr))
return ctrl.Result{RequeueAfter: 10 * time.Second}, nil
return ctrl.Result{RequeueAfter: defaultRequeueAfter}, nil
}

var collidingObjs []string
Expand All @@ -206,7 +207,7 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, cer
if len(collidingObjs) > 0 {
l.Error(fmt.Errorf("object collision detected"), "object collision, retrying after 10s", "phase", i, "collisions", collidingObjs)
setRetryingConditions(cer, fmt.Sprintf("revision object collisions in phase %d\n%s", i, strings.Join(collidingObjs, "\n\n")))
return ctrl.Result{RequeueAfter: 10 * time.Second}, nil
return ctrl.Result{RequeueAfter: defaultRequeueAfter}, nil
}
}

Expand Down Expand Up @@ -280,6 +281,10 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, cer
if meta.FindStatusCondition(cer.Status.Conditions, ocv1.ClusterExtensionRevisionTypeProgressing) == nil {
markAsProgressing(cer, ocv1.ReasonRollingOut, fmt.Sprintf("Revision %s is rolling out.", revVersion))
}
// Requeue to periodically re-evaluate probes. While the TrackingCache watches
// managed objects and triggers reconciliation on status changes, this requeue
// acts as a safety net for cases where watch events are delayed or missed.
return ctrl.Result{RequeueAfter: defaultRequeueAfter}, nil
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here is the change ^

}

return ctrl.Result{}, nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,14 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_RevisionReconciliation(t
existingObjs func() []client.Object
revisionResult machinery.RevisionResult
revisionReconcileErr error
expectedResult ctrl.Result
validate func(*testing.T, client.Client)
}{
{
name: "sets teardown finalizer",
reconcilingRevisionName: clusterExtensionRevisionName,
revisionResult: mockRevisionResult{},
expectedResult: ctrl.Result{RequeueAfter: 10 * time.Second},
existingObjs: func() []client.Object {
ext := newTestClusterExtension()
rev1 := newTestClusterExtensionRevision(t, clusterExtensionRevisionName, ext, testScheme)
Expand Down Expand Up @@ -120,6 +122,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_RevisionReconciliation(t
{
name: "set Available:False:RollingOut status condition during rollout when no probe failures are detected",
reconcilingRevisionName: clusterExtensionRevisionName,
expectedResult: ctrl.Result{RequeueAfter: 10 * time.Second},
revisionResult: mockRevisionResult{},
existingObjs: func() []client.Object {
ext := newTestClusterExtension()
Expand All @@ -143,6 +146,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_RevisionReconciliation(t
{
name: "set Available:False:ProbeFailure condition when probe failures are detected and revision is in transition",
reconcilingRevisionName: clusterExtensionRevisionName,
expectedResult: ctrl.Result{RequeueAfter: 10 * time.Second},
revisionResult: mockRevisionResult{
inTransition: true,
isComplete: false,
Expand Down Expand Up @@ -234,6 +238,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_RevisionReconciliation(t
{
name: "set Available:False:ProbeFailure condition when probe failures are detected and revision is not in transition",
reconcilingRevisionName: clusterExtensionRevisionName,
expectedResult: ctrl.Result{RequeueAfter: 10 * time.Second},
revisionResult: mockRevisionResult{
inTransition: false,
isComplete: false,
Expand Down Expand Up @@ -346,7 +351,8 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_RevisionReconciliation(t
},
},
{
name: "set Progressing:True:RollingOut condition while revision is transitioning",
name: "set Progressing:True:RollingOut condition while revision is transitioning",
expectedResult: ctrl.Result{RequeueAfter: 10 * time.Second},
revisionResult: mockRevisionResult{
inTransition: true,
},
Expand Down Expand Up @@ -501,8 +507,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_RevisionReconciliation(t
},
})

// reconcile cluster extension revision
require.Equal(t, ctrl.Result{}, result)
require.Equal(t, tc.expectedResult, result)
if tc.revisionReconcileErr == nil {
require.NoError(t, err)
} else {
Expand Down Expand Up @@ -652,6 +657,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_ArchivalAndDeletion(t *te
{
name: "teardown finalizer is removed",
revisionResult: mockRevisionResult{},
expectedResult: ctrl.Result{RequeueAfter: 10 * time.Second},
existingObjs: func() []client.Object {
ext := newTestClusterExtension()
rev1 := newTestClusterExtensionRevision(t, clusterExtensionRevisionName, ext, testScheme)
Expand Down Expand Up @@ -1021,6 +1027,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_ProgressDeadline(t *testi
})
return []client.Object{rev1, ext}
},
reconcileResult: ctrl.Result{RequeueAfter: 10 * time.Second},
revisionResult: &mockRevisionResult{
inTransition: true,
},
Expand Down
Loading