77
88 "github.com/google/uuid"
99 "go.opentelemetry.io/otel"
10- "golang.org/x/exp/maps"
1110 "k8s.io/apimachinery/pkg/api/equality"
1211 kerrors "k8s.io/apimachinery/pkg/api/errors"
1312 v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -20,8 +19,8 @@ import (
2019
2120 "github.com/platform-mesh/golang-commons/controller/lifecycle/api"
2221 "github.com/platform-mesh/golang-commons/controller/lifecycle/runtimeobject"
23- "github.com/platform-mesh/golang-commons/controller/lifecycle/spread"
2422 "github.com/platform-mesh/golang-commons/controller/lifecycle/subroutine"
23+ "github.com/platform-mesh/golang-commons/controller/lifecycle/util"
2524 "github.com/platform-mesh/golang-commons/errors"
2625 "github.com/platform-mesh/golang-commons/logger"
2726 "github.com/platform-mesh/golang-commons/sentry"
@@ -57,15 +56,10 @@ func Reconcile(ctx context.Context, nName types.NamespacedName, instance runtime
5756 generationChanged := true
5857
5958 if l .Spreader () != nil && instance .GetDeletionTimestamp ().IsZero () {
60- instanceStatusObj := l .Spreader ().MustToRuntimeObjectSpreadReconcileStatusInterface (instance , log )
61- generationChanged = instance .GetGeneration () != instanceStatusObj .GetObservedGeneration ()
62- isAfterNextReconcileTime := v1 .Now ().UTC ().After (instanceStatusObj .GetNextReconcileTime ().UTC ())
63- refreshRequested := slices .Contains (maps .Keys (instance .GetLabels ()), spread .ReconcileRefreshLabel )
64-
65- reconcileRequired := generationChanged || isAfterNextReconcileTime || refreshRequested
59+ reconcileRequired := l .Spreader ().ReconcileRequired (instance , log )
6660 if ! reconcileRequired {
6761 log .Info ().Msg ("skipping reconciliation, spread reconcile is active. No processing needed" )
68- return l .Spreader ().OnNextReconcile (instanceStatusObj , log )
62+ return l .Spreader ().OnNextReconcile (instance , log )
6963 }
7064 }
7165
@@ -305,7 +299,7 @@ func HandleClientError(msg string, log *logger.Logger, err error, generationChan
305299
306300func MarkResourceAsFinal (instance runtimeobject.RuntimeObject , log * logger.Logger , conditions []v1.Condition , status v1.ConditionStatus , l api.Lifecycle ) {
307301 if l .Spreader () != nil && instance .GetDeletionTimestamp ().IsZero () {
308- instanceStatusObj := l . Spreader (). MustToRuntimeObjectSpreadReconcileStatusInterface (instance , log )
302+ instanceStatusObj := util . MustToInterface [api. RuntimeObjectSpreadReconcileStatus ] (instance , log )
309303 l .Spreader ().SetNextReconcileTime (instanceStatusObj , log )
310304 l .Spreader ().UpdateObservedGeneration (instanceStatusObj , log )
311305 }
@@ -369,7 +363,7 @@ func HandleOperatorError(ctx context.Context, operatorError errors.OperatorError
369363
370364func ValidateInterfaces (instance runtimeobject.RuntimeObject , log * logger.Logger , l api.Lifecycle ) error {
371365 if l .Spreader () != nil {
372- _ , err := l . Spreader (). ToRuntimeObjectSpreadReconcileStatusInterface (instance , log )
366+ _ , err := util . ToInterface [api. RuntimeObjectSpreadReconcileStatus ] (instance , log )
373367 if err != nil {
374368 return err
375369 }
0 commit comments