@@ -436,51 +436,47 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDWorkflowStatusUpdate() error
436
436
return
437
437
}
438
438
439
- wfrId , wfrStatus , err := impl .cdHandler .UpdateWorkflow (wfStatus )
439
+ wfrId , wfrStatus , stateChanged , err := impl .cdHandler .UpdateWorkflow (wfStatus )
440
440
impl .logger .Debugw ("UpdateWorkflow" , "wfrId" , wfrId , "wfrStatus" , wfrStatus )
441
441
if err != nil {
442
442
impl .logger .Error ("err" , err )
443
443
return
444
444
}
445
-
446
- wfr , err := impl .cdWorkflowRepository .FindWorkflowRunnerById (wfrId )
447
- if err != nil {
448
- impl .logger .Errorw ("could not get wf runner" , "err" , err )
449
- return
450
- }
451
- if wfrStatus == string (v1alpha1 .NodeFailed ) || wfrStatus == string (v1alpha1 .NodeError ) {
452
- if len (wfr .ImagePathReservationIds ) > 0 {
453
- err := impl .cdHandler .DeactivateImageReservationPathsOnFailure (wfr .ImagePathReservationIds )
454
- if err != nil {
455
- impl .logger .Errorw ("error in removing image path reservation " )
456
- }
457
- }
458
- }
459
- if wfrStatus == string (v1alpha1 .NodeSucceeded ) || wfrStatus == string (v1alpha1 .NodeFailed ) || wfrStatus == string (v1alpha1 .NodeError ) {
460
- eventType := eventUtil .EventType (0 )
461
- if wfrStatus == string (v1alpha1 .NodeSucceeded ) {
462
- eventType = eventUtil .Success
463
- } else if wfrStatus == string (v1alpha1 .NodeFailed ) || wfrStatus == string (v1alpha1 .NodeError ) {
464
- eventType = eventUtil .Fail
445
+ if stateChanged {
446
+ wfr , err := impl .cdWorkflowRepository .FindWorkflowRunnerById (wfrId )
447
+ if err != nil {
448
+ impl .logger .Errorw ("could not get wf runner" , "wfrId" , wfrId , "err" , err )
449
+ return
465
450
}
466
-
467
- if wfr != nil && executors . CheckIfReTriggerRequired ( wfrStatus , wfStatus . Message , wfr .Status ) {
468
- err = impl .workflowDagExecutor . HandleCdStageReTrigger (wfr )
469
- if err != nil {
470
- //check if this log required or not
471
- impl . logger . Errorw ( "error in HandleCdStageReTrigger" , "error" , err )
451
+ if wfrStatus == string ( v1alpha1 . NodeFailed ) || wfrStatus == string ( v1alpha1 . NodeError ) {
452
+ if len ( wfr .ImagePathReservationIds ) > 0 {
453
+ err : = impl .cdHandler . DeactivateImageReservationPathsOnFailure (wfr . ImagePathReservationIds )
454
+ if err != nil {
455
+ impl . logger . Errorw ( "error in removing image path reservation " , "imagePathReservationIds" , wfr . ImagePathReservationIds , "err" , err )
456
+ }
472
457
}
473
458
}
459
+ if wfrStatus == string (v1alpha1 .NodeSucceeded ) || wfrStatus == string (v1alpha1 .NodeFailed ) || wfrStatus == string (v1alpha1 .NodeError ) {
460
+ eventType := eventUtil .EventType (0 )
461
+ if wfrStatus == string (v1alpha1 .NodeSucceeded ) {
462
+ eventType = eventUtil .Success
463
+ } else if wfrStatus == string (v1alpha1 .NodeFailed ) || wfrStatus == string (v1alpha1 .NodeError ) {
464
+ eventType = eventUtil .Fail
465
+ }
474
466
475
- if wfr .WorkflowType == apiBean .CD_WORKFLOW_TYPE_PRE || wfr .WorkflowType == apiBean .CD_WORKFLOW_TYPE_POST {
476
- event , _ := impl .eventFactory .Build (eventType , & wfr .CdWorkflow .PipelineId , wfr .CdWorkflow .Pipeline .AppId , & wfr .CdWorkflow .Pipeline .EnvironmentId , eventUtil .CD )
477
- impl .logger .Debugw ("event pre stage" , "event" , event )
478
- event = impl .eventFactory .BuildExtraCDData (event , wfr , 0 , wfr .WorkflowType )
479
- _ , evtErr := impl .eventClient .WriteNotificationEvent (event )
480
- if evtErr != nil {
481
- impl .logger .Errorw ("CD stage post fail or success event unable to sent" , "error" , evtErr )
467
+ if wfr != nil && executors .CheckIfReTriggerRequired (wfrStatus , wfStatus .Message , wfr .Status ) {
468
+ err = impl .workflowDagExecutor .HandleCdStageReTrigger (wfr )
469
+ if err != nil {
470
+ //check if this log required or not
471
+ impl .logger .Errorw ("error in HandleCdStageReTrigger" , "workflowRunnerId" , wfr .Id , "workflowStatus" , wfrStatus , "workflowStatusMessage" , wfStatus .Message , "error" , err )
472
+ }
473
+ impl .logger .Debugw ("re-triggered cd stage" , "workflowRunnerId" , wfr .Id , "workflowStatus" , wfrStatus , "workflowStatusMessage" , wfStatus .Message )
474
+ } else {
475
+ impl .sendPrePostCdNotificationEvent (eventType , wfr )
482
476
}
483
477
}
478
+ } else {
479
+ impl .logger .Debugw ("no state change detected for the cd workflow status update, ignoring this event" , "workflowRunnerId" , wfrId , "wfrStatus" , wfrStatus )
484
480
}
485
481
}
486
482
@@ -503,6 +499,18 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDWorkflowStatusUpdate() error
503
499
return nil
504
500
}
505
501
502
+ func (impl * WorkflowEventProcessorImpl ) sendPrePostCdNotificationEvent (eventType eventUtil.EventType , wfr * pipelineConfig.CdWorkflowRunner ) {
503
+ if wfr .WorkflowType == apiBean .CD_WORKFLOW_TYPE_PRE || wfr .WorkflowType == apiBean .CD_WORKFLOW_TYPE_POST {
504
+ event , _ := impl .eventFactory .Build (eventType , & wfr .CdWorkflow .PipelineId , wfr .CdWorkflow .Pipeline .AppId , & wfr .CdWorkflow .Pipeline .EnvironmentId , eventUtil .CD )
505
+ impl .logger .Debugw ("event pre stage" , "event" , event )
506
+ event = impl .eventFactory .BuildExtraCDData (event , wfr , 0 , wfr .WorkflowType )
507
+ _ , evtErr := impl .eventClient .WriteNotificationEvent (event )
508
+ if evtErr != nil {
509
+ impl .logger .Errorw ("CD stage post fail or success event unable to sent" , "error" , evtErr )
510
+ }
511
+ }
512
+ }
513
+
506
514
func (impl * WorkflowEventProcessorImpl ) extractCiCompleteEventFrom (msg * model.PubSubMsg ) (bean.CiCompleteEvent , error ) {
507
515
ciCompleteEvent := bean.CiCompleteEvent {}
508
516
err := json .Unmarshal ([]byte (msg .Data ), & ciCompleteEvent )
0 commit comments