@@ -82,9 +82,15 @@ func (r *ModuleDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Req
8282 }
8383
8484 if moduleDeployment .DeletionTimestamp != nil {
85- // delete moduleDeployment
8685 event .PublishModuleDeploymentDeleteEvent (r .Client , ctx , moduleDeployment )
87- return r .handleDeletingModuleDeployment (ctx , moduleDeployment )
86+ if ! utils .HasFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleReplicaSetExistedFinalizer ) &&
87+ ! utils .HasFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleExistedFinalizer ) {
88+ if moduleDeployment .Status .ReleaseStatus .Progress != v1alpha1 .ModuleDeploymentReleaseProgressTerminated {
89+ moduleDeployment .Status .ReleaseStatus .Progress = v1alpha1 .ModuleDeploymentReleaseProgressTerminated
90+ return ctrl.Result {}, r .Status ().Update (ctx , moduleDeployment )
91+ }
92+ return ctrl.Result {}, nil
93+ }
8894 }
8995
9096 if moduleDeployment .Generation == 1 {
@@ -129,6 +135,10 @@ func (r *ModuleDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Req
129135 case v1alpha1 .ModuleDeploymentReleaseProgressExecuting :
130136 return r .updateModuleReplicaSet (ctx , moduleDeployment , newRS )
131137 case v1alpha1 .ModuleDeploymentReleaseProgressCompleted :
138+ if moduleDeployment .DeletionTimestamp != nil {
139+ moduleDeployment .Status .ReleaseStatus .Progress = v1alpha1 .ModuleDeploymentReleaseProgressTerminating
140+ return ctrl.Result {}, r .Status ().Update (ctx , moduleDeployment )
141+ }
132142 if moduleDeployment .Spec .Replicas != newRS .Spec .Replicas {
133143 moduleDeployment .Status .ReleaseStatus .Progress = v1alpha1 .ModuleDeploymentReleaseProgressInit
134144 log .Log .Info ("update release status progress to init when complete moduleDeployment" , "moduleDeploymentName" , moduleDeployment .Name )
@@ -161,6 +171,27 @@ func (r *ModuleDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Req
161171 return ctrl.Result {}, utils .Error (err , "update moduleDeployment progress from paused to executing failed" )
162172 }
163173 }
174+ case v1alpha1 .ModuleDeploymentReleaseProgressTerminating :
175+ // delete modules
176+ if utils .HasFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleExistedFinalizer ) {
177+ if moduleDeployment .Spec .Replicas != 0 {
178+ moduleDeployment .Spec .Replicas = 0
179+ return ctrl.Result {}, r .Update (ctx , moduleDeployment )
180+ }
181+ if newRS .Status .Replicas != 0 {
182+ handleInitModuleDeployment (moduleDeployment , newRS )
183+ return ctrl.Result {}, r .Status ().Update (ctx , moduleDeployment )
184+ }
185+ utils .RemoveFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleExistedFinalizer )
186+ return ctrl.Result {}, r .Update (ctx , moduleDeployment )
187+ }
188+
189+ // delete module replicaset
190+ if utils .HasFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleReplicaSetExistedFinalizer ) {
191+ return r .handleDeletingModuleDeployment (ctx , moduleDeployment )
192+ }
193+ case v1alpha1 .ModuleDeploymentReleaseProgressTerminated :
194+ return ctrl.Result {}, nil
164195 }
165196 return ctrl.Result {}, nil
166197}
@@ -190,10 +221,6 @@ func handleInitModuleDeployment(moduleDeployment *v1alpha1.ModuleDeployment, new
190221
191222// handle deleting module deployment
192223func (r * ModuleDeploymentReconciler ) handleDeletingModuleDeployment (ctx context.Context , moduleDeployment * v1alpha1.ModuleDeployment ) (ctrl.Result , error ) {
193- if ! utils .HasFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleReplicaSetExistedFinalizer ) {
194- return ctrl.Result {}, nil
195- }
196-
197224 existReplicaset := true
198225 set := map [string ]string {
199226 label .ModuleDeploymentLabel : moduleDeployment .Name ,
@@ -218,6 +245,7 @@ func (r *ModuleDeploymentReconciler) handleDeletingModuleDeployment(ctx context.
218245 return ctrl.Result {}, utils .Error (err , "Failed to delete moduleReplicaSet" , "moduleReplicaSetName" , replicaSetList .Items [i ].Name )
219246 }
220247 }
248+
221249 requeueAfter := utils .GetNextReconcileTime (moduleDeployment .DeletionTimestamp .Time )
222250 return ctrl.Result {RequeueAfter : requeueAfter }, nil
223251 } else {
@@ -249,6 +277,7 @@ func (r *ModuleDeploymentReconciler) updateOwnerReference(ctx context.Context, m
249277 })
250278 moduleDeployment .SetOwnerReferences (ownerReference )
251279 utils .AddFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleReplicaSetExistedFinalizer )
280+ utils .AddFinalizer (& moduleDeployment .ObjectMeta , finalizer .ModuleExistedFinalizer )
252281 err = utils .UpdateResource (r .Client , ctx , moduleDeployment )
253282 if err != nil {
254283 return utils .Error (err , "Failed to update moduleDeployment" , "moduleDeploymentName" , moduleDeployment .Name )
@@ -304,6 +333,9 @@ func (r *ModuleDeploymentReconciler) createOrGetModuleReplicas(ctx context.Conte
304333 log .Log .Info ("module has changed, need create a new replicaset" )
305334 }
306335
336+ if moduleDeployment .DeletionTimestamp != nil {
337+ return nil , nil , false , nil
338+ }
307339 // create a new moduleReplicaset
308340 moduleReplicaSet , err := r .createNewReplicaSet (ctx , moduleDeployment , maxVersion + 1 )
309341 if err != nil {
@@ -381,6 +413,7 @@ func (r *ModuleDeploymentReconciler) updateModuleReplicaSet(ctx context.Context,
381413 }
382414
383415 err := r .updateModuleReplicas (ctx , replicas , moduleDeployment , newRS )
416+
384417 if err != nil {
385418 return ctrl.Result {}, err
386419 }
0 commit comments