Skip to content

Commit 6276f82

Browse files
Merge pull request #6386 from devtron-labs/workerstatus-update-notify-oss
fix: workflow status fix for pre and post cd
2 parents dd968f0 + 1e0393c commit 6276f82

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

pkg/eventProcessor/in/WorkflowEventProcessorService.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -444,12 +444,14 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDWorkflowStatusUpdate() error
444444
impl.logger.Error("err", err)
445445
return
446446
}
447+
447448
if stateChanged {
448449
wfr, err := impl.cdWorkflowRepository.FindWorkflowRunnerById(wfrId)
449450
if err != nil {
450451
impl.logger.Errorw("could not get wf runner", "wfrId", wfrId, "err", err)
451452
return
452453
}
454+
453455
if wfrStatus == string(v1alpha1.NodeFailed) || wfrStatus == string(v1alpha1.NodeError) {
454456
if len(wfr.ImagePathReservationIds) > 0 {
455457
err := impl.cdHandler.DeactivateImageReservationPathsOnFailure(wfr.ImagePathReservationIds)
@@ -458,22 +460,28 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDWorkflowStatusUpdate() error
458460
}
459461
}
460462
}
461-
if wfrStatus == string(v1alpha1.NodeSucceeded) || wfrStatus == string(v1alpha1.NodeFailed) || wfrStatus == string(v1alpha1.NodeError) {
462-
eventType := eventUtil.EventType(0)
463-
if wfrStatus == string(v1alpha1.NodeSucceeded) {
464-
eventType = eventUtil.Success
465-
} else if wfrStatus == string(v1alpha1.NodeFailed) || wfrStatus == string(v1alpha1.NodeError) {
466-
eventType = eventUtil.Fail
467-
}
468463

464+
wfStatusInEvent := string(wfStatus.Phase)
465+
if wfStatusInEvent == string(v1alpha1.NodeSucceeded) || wfStatusInEvent == string(v1alpha1.NodeFailed) || wfStatusInEvent == string(v1alpha1.NodeError) {
466+
// the re-trigger should only happen when we get a pod deleted event.
469467
if wfr != nil && executors.CheckIfReTriggerRequired(wfrStatus, wfStatus.Message, wfr.Status) {
470468
err = impl.workflowDagExecutor.HandleCdStageReTrigger(wfr)
471469
if err != nil {
472-
//check if this log required or not
470+
// check if this log required or not
473471
impl.logger.Errorw("error in HandleCdStageReTrigger", "workflowRunnerId", wfr.Id, "workflowStatus", wfrStatus, "workflowStatusMessage", wfStatus.Message, "error", err)
474472
}
475473
impl.logger.Debugw("re-triggered cd stage", "workflowRunnerId", wfr.Id, "workflowStatus", wfrStatus, "workflowStatusMessage", wfStatus.Message)
476474
} else {
475+
// we send this notification on *workflow_runner* status, both success and failure
476+
// during workflow runner failure, particularly when failure occurred due to pod deletion , we get two events from kubewatch.
477+
// event1: with failure status + exit-code [need to send notification]
478+
// event2: with failure status + pod deletion message [skip notification]
479+
eventType := eventUtil.EventType(0)
480+
if wfStatusInEvent == string(v1alpha1.NodeSucceeded) {
481+
eventType = eventUtil.Success
482+
} else if wfStatusInEvent == string(v1alpha1.NodeFailed) || wfStatusInEvent == string(v1alpha1.NodeError) {
483+
eventType = eventUtil.Fail
484+
}
477485
impl.sendPrePostCdNotificationEvent(eventType, wfr)
478486
}
479487
}

pkg/pipeline/CdHandler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ func (impl *CdHandlerImpl) UpdateWorkflow(workflowStatus v1alpha1.WorkflowStatus
312312
if string(v1alpha1.NodeError) == savedWorkflow.Status || string(v1alpha1.NodeFailed) == savedWorkflow.Status {
313313
impl.Logger.Warnw("cd stage failed for workflow: ", "wfId", savedWorkflow.Id)
314314
}
315+
return savedWorkflow.Id, savedWorkflow.Status, true, nil
315316
}
316317
return savedWorkflow.Id, savedWorkflow.Status, false, nil
317318
}

0 commit comments

Comments
 (0)