conductor-oss/conductor · error · TransientException
Error resetting workflow state: {}
Error message
Error resetting workflow state: {} What it means
Thrown by resetWorkflow when the indexDAO.asyncRemoveWorkflow / removeWorkflow call inside its try block raises any Exception. resetWorkflow first verifies the workflow exists (getWorkflowModelFromDataStore) and removes it from the ExecutionDAO, then attempts to clear it from the index; an index failure at that step aborts with this TransientException.
Source
Thrown at core/src/main/java/com/netflix/conductor/core/dal/ExecutionDAOFacade.java:487
}
/**
* Reset the workflow state by removing from the {@link ExecutionDAO} and removing this workflow
* from the {@link IndexDAO}.
*
* @param workflowId the workflow id to be reset
*/
public void resetWorkflow(String workflowId) {
getWorkflowModelFromDataStore(workflowId, true);
executionDAO.removeWorkflow(workflowId);
try {
if (properties.isAsyncIndexingEnabled()) {
indexDAO.asyncRemoveWorkflow(workflowId);
} else {
indexDAO.removeWorkflow(workflowId);
}
} catch (Exception e) {
throw new TransientException("Error resetting workflow state: " + workflowId, e);
}
}
public List<TaskModel> createTasks(List<TaskModel> tasks) {
tasks.forEach(this::externalizeTaskData);
return executionDAO.createTasks(tasks);
}
public List<Task> getTasksForWorkflow(String workflowId) {
return getTaskModelsForWorkflow(workflowId).stream()
.map(TaskModel::toTask)
.collect(Collectors.toList());
}
public List<TaskModel> getTaskModelsForWorkflow(String workflowId) {
return executionDAO.getTasksForWorkflow(workflowId);
}
View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Check the wrapped exception — typically an index connectivity/timeout issue.
- Because the DAO record was already removed, manually remove the orphaned index document for that workflowId if consistency matters.
- Retry the reset once the index is healthy; or run a separate index-cleanup.
- Ensure the indexDAO backend has capacity for the delete load.
Defensive patterns
Strategy: retry
Try / catch
try {
executionDAOFacade.resetWorkflow(workflowId);
} catch (TransientException e) {
// DAO record already removed; index may be orphaned -> retry/cleanup index
} Prevention
- After a resetWorkflow TransientException, plan to reconcile the index separately (DAO is already clean).
- Ensure the indexDAO backend is healthy before batch resets.
- Wrap reset operations in a retry-with-backoff that tolerates partial completion.
When it happens
Trigger: Calling resetWorkflow(workflowId) when the ExecutionDAO removal succeeded but the subsequent index removal threw. Note the DAO record is already gone at this point, so the index is left with a dangling entry.
Common situations: Index (Elasticsearch) unavailable during a reset/restart workflow operation. A 'restart workflow' API call that resets state and then re-runs. Index overloaded or rejecting deletes.
Related errors
- Error reading workflow: %s
- Workflow can not be serialized to json
- Task %s of workflow %s can not be serialized to json
- Error removing workflow: {}
- Error creating workflow: %s
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/9f95cdc9dd872a3b.
Report an issue: GitHub.