From 692d130c7efb9cbeff2358afaa900265a33faf97 Mon Sep 17 00:00:00 2001 From: WeichengWang Date: Tue, 28 Oct 2025 15:59:51 +0800 Subject: [PATCH] refact: move GetSelectedEmployeeNames to ReconcileLifecycleOptions and support record status if ReconcileRequeueOptions implemented --- pkg/frame/controller/consister.go | 4 ++-- .../controller/resourceconsist_controller.go | 16 ++++++++-------- pkg/frame/controller/types.go | 11 ++++++----- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/pkg/frame/controller/consister.go b/pkg/frame/controller/consister.go index c7e0172..df69af3 100644 --- a/pkg/frame/controller/consister.go +++ b/pkg/frame/controller/consister.go @@ -214,7 +214,7 @@ func (r *Consist) syncEmployees(ctx context.Context, employer client.Object, exp needRecordEmployees := lifecycleOptionsImplemented && lifecycleOptions.FollowPodOpsLifeCycle() && lifecycleOptions.NeedRecordLifecycleFinalizerCondition() if needRecordEmployees { if employer.GetAnnotations()[lifecycleFinalizerRecordedAnnoKey] != "" { - selectedEmployees, err := r.adapter.GetSelectedEmployeeNames(ctx, employer) + selectedEmployees, err := lifecycleOptions.GetSelectedEmployeeNames(ctx, employer) if err != nil { return false, false, CUDEmployeeResults{}, fmt.Errorf("GetSelectedEmployeeNames failed, err: %s", err.Error()) } @@ -297,7 +297,7 @@ func (r *Consist) ensureExpectedFinalizer(ctx context.Context, employer client.O return true, nil } - selectedEmployeeNames, err := r.adapter.GetSelectedEmployeeNames(ctx, employer) + selectedEmployeeNames, err := lifecycleOptions.GetSelectedEmployeeNames(ctx, employer) if err != nil { return false, fmt.Errorf("get selected employees' names failed, err: %s", err.Error()) } diff --git a/pkg/frame/controller/resourceconsist_controller.go b/pkg/frame/controller/resourceconsist_controller.go index 4ed0c8c..95e5d65 100644 --- a/pkg/frame/controller/resourceconsist_controller.go +++ b/pkg/frame/controller/resourceconsist_controller.go @@ -254,14 +254,6 @@ func (r *Consist) Reconcile(ctx context.Context, request reconcile.Request) (rec } } - if syncEmployerFailedExist || syncEmployeeFailedExist { - requeueOptions, requeueOptionsImplemented := r.adapter.(ReconcileRequeueOptions) - if requeueOptionsImplemented { - return reconcile.Result{RequeueAfter: requeueOptions.EmployeeSyncRequeueInterval()}, nil - } - return reconcile.Result{}, fmt.Errorf("employer or employees synced failed exist") - } - if recordOptions, ok := r.adapter.(StatusRecordOptions); ok { err = recordOptions.RecordStatuses(ctx, employer, cudEmployerResults, cudEmployeeResults) if err != nil { @@ -272,5 +264,13 @@ func (r *Consist) Reconcile(ctx context.Context, request reconcile.Request) (rec } } + if syncEmployerFailedExist || syncEmployeeFailedExist { + requeueOptions, requeueOptionsImplemented := r.adapter.(ReconcileRequeueOptions) + if requeueOptionsImplemented { + return reconcile.Result{RequeueAfter: requeueOptions.EmployeeSyncRequeueInterval()}, nil + } + return reconcile.Result{}, fmt.Errorf("employer or employees synced failed exist") + } + return reconcile.Result{}, nil } diff --git a/pkg/frame/controller/types.go b/pkg/frame/controller/types.go index cc218ba..c83fe95 100644 --- a/pkg/frame/controller/types.go +++ b/pkg/frame/controller/types.go @@ -88,6 +88,11 @@ type ReconcileLifecycleOptions interface { // NeedRecordLifecycleFinalizerCondition only needed for those adapters that follow PodOpsLifecycle, // in the case of employment relationship might change and resources in backend provider might be changed by others. NeedRecordLifecycleFinalizerCondition() bool + + // GetSelectedEmployeeNames returns employees' names selected by employer + // note: in multi cluster case, if adapters deployed in fed and employees are under local, the format of employeeName + // should be "employeeName" + "#" + "clusterName" + GetSelectedEmployeeNames(ctx context.Context, employer client.Object) ([]string, error) } type ReconcileRequeueOptions interface { @@ -99,11 +104,6 @@ type ReconcileRequeueOptions interface { type ReconcileAdapter interface { GetControllerName() string - // GetSelectedEmployeeNames returns employees' names selected by employer - // note: in multi cluster case, if adapters deployed in fed and employees are under local, the format of employeeName - // should be "employeeName" + "#" + "clusterName" - GetSelectedEmployeeNames(ctx context.Context, employer client.Object) ([]string, error) - // GetExpectedEmployer and GetCurrentEmployer return expect/current status of employer from related backend provider GetExpectedEmployer(ctx context.Context, employer client.Object) ([]IEmployer, error) GetCurrentEmployer(ctx context.Context, employer client.Object) ([]IEmployer, error) @@ -134,6 +134,7 @@ type IEmployee interface { // GetEmployeeName returns employee's name // note: in multi cluster case, if adapters deployed in fed and employees are under local, the format of employeeName // should be "employeeName" + "#" + "clusterName" + // GetEmployeeName need to be implemented if follow Lifecycle GetEmployeeName() string GetEmployeeStatuses() interface{} EmployeeEqual(employee IEmployee) (bool, error)