func convertSagaStateToJobStatus()

in scheduler/api/thrift/get_status.go [44:105]


func convertSagaStateToJobStatus(sagaState *s.SagaState) *scoot.JobStatus {
	js := scoot.NewJobStatus()

	js.ID = sagaState.SagaId()
	js.Status = scoot.Status_NOT_STARTED
	js.TaskStatus = make(map[string]scoot.Status)
	js.TaskData = make(map[string]*scoot.RunStatus)
	if job, err := domain.DeserializeJob(sagaState.Job()); err == nil {
		for i := range job.Def.Tasks {
			js.TaskStatus[job.Def.Tasks[i].TaskID] = scoot.Status_NOT_STARTED
		}
	}

	// NotStarted Tasks will not have a logged value
	for _, id := range sagaState.GetTaskIds() {
		taskStatus := scoot.Status_NOT_STARTED

		if sagaState.IsSagaAborted() {
			if sagaState.IsCompTaskCompleted(id) {
				taskStatus = scoot.Status_ROLLED_BACK
			} else if sagaState.IsTaskStarted(id) {
				taskStatus = scoot.Status_ROLLING_BACK
			}
		} else {
			if sagaState.IsTaskCompleted(id) {
				taskStatus = scoot.Status_COMPLETED
				if thriftJobStatus, err := workerRunStatusToScootRunStatus(sagaState.GetEndTaskData(id)); err == nil {
					js.TaskData[id] = thriftJobStatus
				}
			} else if sagaState.IsTaskStarted(id) {
				taskStatus = scoot.Status_IN_PROGRESS
				if startData := sagaState.GetStartTaskData(id); startData != nil {
					if thriftJobStatus, err := workerRunStatusToScootRunStatus(startData); err == nil {
						js.TaskData[id] = thriftJobStatus
					}
				}

			}
		}

		js.TaskStatus[id] = taskStatus
	}

	// Saga Completed Successfully
	if sagaState.IsSagaCompleted() && !sagaState.IsSagaAborted() {
		js.Status = scoot.Status_COMPLETED

		// Saga Completed Unsuccessfully was Aborted & Rolled Back
	} else if sagaState.IsSagaCompleted() && sagaState.IsSagaAborted() {
		js.Status = scoot.Status_ROLLED_BACK

		// Saga In Progress
	} else if !sagaState.IsSagaCompleted() && !sagaState.IsSagaAborted() {
		js.Status = scoot.Status_IN_PROGRESS

		// Saga in Progress - Aborted and Rolling Back
	} else if !sagaState.IsSagaCompleted() && sagaState.IsSagaAborted() {
		js.Status = scoot.Status_ROLLING_BACK
	}

	return js
}