Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## 88 Release Notes

### Improved status reporting behavior

When Cromwell restarts during a workflow that is failing, it no longer reports pending tasks as a reason for that failure.

### Optional docker soft links

Cromwell now allows opting into configured soft links on shared file systems such as HPC environments. More details can
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,16 @@ case class WorkflowExecutionActor(params: WorkflowExecutionActorParams)
case Event(JobFailedNonRetryableResponse(jobKey, _: JobNotFoundException, _), _) if restarting =>
val benignException =
new Exception(
"Cromwell server was restarted while this workflow was running. As part of the restart process, Cromwell attempted to reconnect to this job, however it was never started in the first place. This is a benign failure and not the cause of failure for this workflow, it can be safely ignored."
"Task did not start because a previous job has already failed."
) with NoStackTrace
handleNonRetryableFailure(stateData, jobKey, benignException)

handleNonRetryableFailure(stateData,
jobKey,
benignException,
None,
Map.empty,
includeInWorkflowLevelFailures = false
)
}

/* ********************** */
Expand Down Expand Up @@ -470,11 +477,14 @@ case class WorkflowExecutionActor(params: WorkflowExecutionActorParams)
failedJobKey: JobKey,
reason: Throwable,
returnCode: Option[Int] = None,
jobExecutionMap: JobExecutionMap = Map.empty
jobExecutionMap: JobExecutionMap = Map.empty,
includeInWorkflowLevelFailures: Boolean = true
) = {
pushFailedCallMetadata(failedJobKey, returnCode, reason, retryableFailure = false)

val dataWithFailure = stateData.executionFailure(failedJobKey, reason, jobExecutionMap)
val dataWithFailure =
if (includeInWorkflowLevelFailures) stateData.executionFailure(failedJobKey, reason, jobExecutionMap)
else stateData
/*
* If new calls are allowed don't seal the execution store as we want to go as far as possible.
*
Expand Down