@@ -592,20 +592,9 @@ func (impl *CiHandlerImpl) GetBuildHistory(pipelineId int, appId int, offset int
592
592
func (impl * CiHandlerImpl ) CancelBuild (workflowId int , forceAbort bool ) (int , error ) {
593
593
workflow , err := impl .ciWorkflowRepository .FindById (workflowId )
594
594
if err != nil {
595
- impl .Logger .Errorw ("err" , "err" , err )
595
+ impl .Logger .Errorw ("error in finding ci-workflow by workflow id" , "ciWorkflowId" , workflowId , "err" , err )
596
596
return 0 , err
597
597
}
598
- if ! (string (v1alpha1 .NodePending ) == workflow .Status || string (v1alpha1 .NodeRunning ) == workflow .Status ) {
599
- if forceAbort {
600
- return impl .cancelBuildAfterStartWorkflowStage (workflow )
601
- } else {
602
- return 0 , & util.ApiError {Code : "200" , HttpStatusCode : 400 , UserMessage : "cannot cancel build, build not in progress" }
603
- }
604
- }
605
- //this arises when someone deletes the workflow in resource browser and wants to force abort a ci
606
- if workflow .Status == string (v1alpha1 .NodeRunning ) && forceAbort {
607
- return impl .cancelBuildAfterStartWorkflowStage (workflow )
608
- }
609
598
isExt := workflow .Namespace != DefaultCiWorkflowNamespace
610
599
var env * repository3.Environment
611
600
var restConfig * rest.Config
@@ -618,12 +607,20 @@ func (impl *CiHandlerImpl) CancelBuild(workflowId int, forceAbort bool) (int, er
618
607
619
608
// Terminate workflow
620
609
err = impl .workflowService .TerminateWorkflow (workflow .ExecutorType , workflow .Name , workflow .Namespace , restConfig , isExt , env )
621
- if err != nil && strings .Contains (err .Error (), "cannot find workflow" ) {
610
+ if err != nil && forceAbort {
611
+ impl .Logger .Errorw ("error in terminating workflow, with force abort flag flag as true" , "workflowName" , workflow .Name , "err" , err )
612
+ //ignoring error in case of force abort later updating workflow with force abort
613
+ } else if err != nil && strings .Contains (err .Error (), "cannot find workflow" ) {
622
614
return 0 , & util.ApiError {Code : "200" , HttpStatusCode : http .StatusBadRequest , UserMessage : err .Error ()}
623
615
} else if err != nil {
624
616
impl .Logger .Errorw ("cannot terminate wf" , "err" , err )
625
617
return 0 , err
626
618
}
619
+ err = impl .handleForceAbortCase (workflow , forceAbort )
620
+ if err != nil {
621
+ impl .Logger .Errorw ("error in handleForceAbortCase" , "forceAbortFlag" , forceAbort , "workflow" , workflow , "err" , err )
622
+ return 0 , err
623
+ }
627
624
628
625
workflow .Status = executors .WorkflowCancel
629
626
if workflow .ExecutorType == cdWorkflow .WORKFLOW_EXECUTOR_TYPE_SYSTEM {
@@ -652,16 +649,32 @@ func (impl *CiHandlerImpl) CancelBuild(workflowId int, forceAbort bool) (int, er
652
649
return workflow .Id , nil
653
650
}
654
651
655
- func (impl * CiHandlerImpl ) cancelBuildAfterStartWorkflowStage (workflow * pipelineConfig.CiWorkflow ) (int , error ) {
652
+ func (impl * CiHandlerImpl ) handleForceAbortCase (workflow * pipelineConfig.CiWorkflow , forceAbort bool ) error {
653
+ isWorkflowInNonTerminalStage := workflow .Status == string (v1alpha1 .NodePending ) || workflow .Status == string (v1alpha1 .NodeRunning )
654
+ if ! isWorkflowInNonTerminalStage {
655
+ if forceAbort {
656
+ return impl .updateWorkflowForForceAbort (workflow )
657
+ } else {
658
+ return & util.ApiError {Code : "200" , HttpStatusCode : 400 , UserMessage : "cannot cancel build, build not in progress" }
659
+ }
660
+ }
661
+ //this arises when someone deletes the workflow in resource browser and wants to force abort a ci
662
+ if workflow .Status == string (v1alpha1 .NodeRunning ) && forceAbort {
663
+ return impl .updateWorkflowForForceAbort (workflow )
664
+ }
665
+ return nil
666
+ }
667
+
668
+ func (impl * CiHandlerImpl ) updateWorkflowForForceAbort (workflow * pipelineConfig.CiWorkflow ) error {
656
669
workflow .Status = executors .WorkflowCancel
657
670
workflow .PodStatus = string (bean .Failed )
658
671
workflow .Message = ABORT_MESSAGE_AFTER_STARTING_STAGE
659
672
err := impl .ciWorkflowRepository .UpdateWorkFlow (workflow )
660
673
if err != nil {
661
674
impl .Logger .Errorw ("error in updating workflow status" , "err" , err )
662
- return 0 , err
675
+ return err
663
676
}
664
- return workflow . Id , nil
677
+ return nil
665
678
}
666
679
667
680
func (impl * CiHandlerImpl ) getRestConfig (workflow * pipelineConfig.CiWorkflow ) (* rest.Config , error ) {
0 commit comments