@@ -436,51 +436,47 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDWorkflowStatusUpdate() error
436436			return 
437437		}
438438
439- 		wfrId , wfrStatus , err  :=  impl .cdHandler .UpdateWorkflow (wfStatus )
439+ 		wfrId , wfrStatus , stateChanged ,  err  :=  impl .cdHandler .UpdateWorkflow (wfStatus )
440440		impl .logger .Debugw ("UpdateWorkflow" , "wfrId" , wfrId , "wfrStatus" , wfrStatus )
441441		if  err  !=  nil  {
442442			impl .logger .Error ("err" , err )
443443			return 
444444		}
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 
465450			}
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+ 					} 
472457				}
473458			}
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+ 				}
474466
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 )
482476				}
483477			}
478+ 		} else  {
479+ 			impl .logger .Debugw ("no state change detected for the cd workflow status update, ignoring this event" , "workflowRunnerId" , wfrId , "wfrStatus" , wfrStatus )
484480		}
485481	}
486482
@@ -503,6 +499,18 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDWorkflowStatusUpdate() error
503499	return  nil 
504500}
505501
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+ 
506514func  (impl  * WorkflowEventProcessorImpl ) extractCiCompleteEventFrom (msg  * model.PubSubMsg ) (bean.CiCompleteEvent , error ) {
507515	ciCompleteEvent  :=  bean.CiCompleteEvent {}
508516	err  :=  json .Unmarshal ([]byte (msg .Data ), & ciCompleteEvent )
0 commit comments