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

  1. Check the wrapped exception — typically an index connectivity/timeout issue.
  2. Because the DAO record was already removed, manually remove the orphaned index document for that workflowId if consistency matters.
  3. Retry the reset once the index is healthy; or run a separate index-cleanup.
  4. 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

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


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/9f95cdc9dd872a3b. Report an issue: GitHub.