@@ -83,10 +83,6 @@ func (r *Reconciler) execute(
8383 // which would update the lastTransitionTime even though the status hasn't effectively changed.
8484 markUpdateRunProgressingIfNotWaitingOrStuck (updateRun )
8585 if updatingStageIndex < len (updateRunStatus .StagesStatus ) {
86- maxConcurrency , err := calculateMaxConcurrencyValue (updateRunStatus , updatingStageIndex )
87- if err != nil {
88- return false , 0 , err
89- }
9086 updatingStageStatus = & updateRunStatus .StagesStatus [updatingStageIndex ]
9187 approved , err := r .checkBeforeStageTasksStatus (ctx , updatingStageIndex , updateRun )
9288 if err != nil {
@@ -97,6 +93,10 @@ func (r *Reconciler) execute(
9793 markUpdateRunWaiting (updateRun , fmt .Sprintf (condition .UpdateRunWaitingMessageFmt , "before-stage" , updatingStageStatus .StageName ))
9894 return false , stageUpdatingWaitTime , nil
9995 }
96+ maxConcurrency , err := calculateMaxConcurrencyValue (updateRunStatus , updatingStageIndex )
97+ if err != nil {
98+ return false , 0 , err
99+ }
100100 waitTime , err = r .executeUpdatingStage (ctx , updateRun , updatingStageIndex , toBeUpdatedBindings , maxConcurrency )
101101 // The execution has not finished yet.
102102 return false , waitTime , err
@@ -111,17 +111,17 @@ func (r *Reconciler) execute(
111111func (r * Reconciler ) checkBeforeStageTasksStatus (ctx context.Context , updatingStageIndex int , updateRun placementv1beta1.UpdateRunObj ) (bool , error ) {
112112 updateRunRef := klog .KObj (updateRun )
113113 updateRunStatus := updateRun .GetUpdateRunStatus ()
114- updatingStageStatus := & updateRunStatus .StagesStatus [updatingStageIndex ]
115114 updatingStage := & updateRunStatus .UpdateStrategySnapshot .Stages [updatingStageIndex ]
116115 if updatingStage .BeforeStageTasks == nil {
117116 klog .V (2 ).InfoS ("There is no before stage task for this stage" , "stage" , updatingStage .Name , "updateRun" , updateRunRef )
118117 return true , nil
119118 }
120119
120+ updatingStageStatus := & updateRunStatus .StagesStatus [updatingStageIndex ]
121121 for i , task := range updatingStage .BeforeStageTasks {
122122 switch task .Type {
123123 case placementv1beta1 .StageTaskTypeApproval :
124- approved , err := r .handleStageApprovalTask (ctx , & updatingStageStatus .BeforeStageTaskStatus [i ], updatingStage , updateRun )
124+ approved , err := r .handleStageApprovalTask (ctx , & updatingStageStatus .BeforeStageTaskStatus [i ], updatingStage , updateRun , placementv1beta1 . BeforeStageTaskLabelValue )
125125 if err != nil {
126126 return false , err
127127 }
@@ -418,7 +418,7 @@ func (r *Reconciler) checkAfterStageTasksStatus(ctx context.Context, updatingSta
418418 klog .V (2 ).InfoS ("The after stage wait task has completed" , "stage" , updatingStage .Name , "updateRun" , updateRunRef )
419419 }
420420 case placementv1beta1 .StageTaskTypeApproval :
421- approved , err := r .handleStageApprovalTask (ctx , & updatingStageStatus .AfterStageTaskStatus [i ], updatingStage , updateRun )
421+ approved , err := r .handleStageApprovalTask (ctx , & updatingStageStatus .AfterStageTaskStatus [i ], updatingStage , updateRun , placementv1beta1 . AfterStageTaskLabelValue )
422422 if err != nil {
423423 return false , - 1 , err
424424 }
@@ -440,6 +440,7 @@ func (r *Reconciler) handleStageApprovalTask(
440440 stageTaskStatus * placementv1beta1.StageTaskStatus ,
441441 updatingStage * placementv1beta1.StageConfig ,
442442 updateRun placementv1beta1.UpdateRunObj ,
443+ stageTaskType string ,
443444) (bool , error ) {
444445 updateRunRef := klog .KObj (updateRun )
445446
@@ -450,7 +451,7 @@ func (r *Reconciler) handleStageApprovalTask(
450451 }
451452
452453 // Check if the approval request has been created.
453- approvalRequest := buildApprovalRequestObject (types.NamespacedName {Name : stageTaskStatus .ApprovalRequestName , Namespace : updateRun .GetNamespace ()}, updatingStage .Name , updateRun .GetName ())
454+ approvalRequest := buildApprovalRequestObject (types.NamespacedName {Name : stageTaskStatus .ApprovalRequestName , Namespace : updateRun .GetNamespace ()}, updatingStage .Name , updateRun .GetName (), stageTaskType )
454455 requestRef := klog .KObj (approvalRequest )
455456 if err := r .Client .Create (ctx , approvalRequest ); err != nil {
456457 if apierrors .IsAlreadyExists (err ) {
@@ -618,9 +619,9 @@ func checkClusterUpdateResult(
618619 return false , nil
619620}
620621
621- // buildApprovalRequestObject creates an approval request object for after-stage tasks.
622+ // buildApprovalRequestObject creates an approval request object for before-stage or after-stage tasks.
622623// It returns a ClusterApprovalRequest if namespace is empty, otherwise returns an ApprovalRequest.
623- func buildApprovalRequestObject (namespacedName types.NamespacedName , stageName , updateRunName string ) placementv1beta1.ApprovalRequestObj {
624+ func buildApprovalRequestObject (namespacedName types.NamespacedName , stageName , updateRunName , stageTaskType string ) placementv1beta1.ApprovalRequestObj {
624625 var approvalRequest placementv1beta1.ApprovalRequestObj
625626 if namespacedName .Namespace == "" {
626627 approvalRequest = & placementv1beta1.ClusterApprovalRequest {
@@ -629,6 +630,7 @@ func buildApprovalRequestObject(namespacedName types.NamespacedName, stageName,
629630 Labels : map [string ]string {
630631 placementv1beta1 .TargetUpdatingStageNameLabel : stageName ,
631632 placementv1beta1 .TargetUpdateRunLabel : updateRunName ,
633+ placementv1beta1 .TargetStageTaskLabel : stageTaskType ,
632634 placementv1beta1 .IsLatestUpdateRunApprovalLabel : "true" ,
633635 },
634636 },
@@ -645,6 +647,7 @@ func buildApprovalRequestObject(namespacedName types.NamespacedName, stageName,
645647 Labels : map [string ]string {
646648 placementv1beta1 .TargetUpdatingStageNameLabel : stageName ,
647649 placementv1beta1 .TargetUpdateRunLabel : updateRunName ,
650+ placementv1beta1 .TargetStageTaskLabel : stageTaskType ,
648651 placementv1beta1 .IsLatestUpdateRunApprovalLabel : "true" ,
649652 },
650653 },
0 commit comments