conductor-oss/conductor · warning · IllegalStateException

WorkflowRepairService is disabled.

Error message

WorkflowRepairService is disabled.

What it means

Thrown by AdminServiceImpl.verifyAndRepairWorkflowConsistency when the WorkflowRepairService Spring bean is not present in the application context (injected as Optional and resolved to null). The repair service is an optional component that reconciles inconsistent workflow states. When it's not registered, the admin repair API endpoint cannot function.

Source

Thrown at core/src/main/java/com/netflix/conductor/service/AdminServiceImpl.java:105

     * @param taskType Name of the task
     * @param start Start index of pagination
     * @param count Number of entries
     * @return list of pending {@link Task}
     */
    public List<Task> getListOfPendingTask(String taskType, Integer start, Integer count) {
        List<Task> tasks = executionService.getPendingTasksForTaskType(taskType);
        int total = start + count;
        total = Math.min(tasks.size(), total);
        if (start > tasks.size()) {
            start = tasks.size();
        }
        return tasks.subList(start, total);
    }

    @Override
    public boolean verifyAndRepairWorkflowConsistency(String workflowId) {
        if (workflowRepairService == null) {
            throw new IllegalStateException(
                    WorkflowRepairService.class.getSimpleName() + " is disabled.");
        }
        return workflowRepairService.verifyAndRepairWorkflow(workflowId, true);
    }

    /**
     * Queue up the workflow for sweep.
     *
     * @param workflowId Id of the workflow
     * @return the id of the workflow instance that can be use for tracking.
     */
    public String requeueSweep(String workflowId) {
        boolean pushed =
                queueDAO.pushIfNotExists(
                        Utils.DECIDER_QUEUE,
                        workflowId,
                        properties.getWorkflowOffsetTimeout().getSeconds());
        return pushed + "." + workflowId;

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Ensure the module providing WorkflowRepairService is on the classpath (typically the core or server module's reconciliation package).
  2. Check if there is a property that enables/disables the repair service (e.g. conductor.app.repairServiceEnabled or similar) and set it to true.
  3. If the repair service is intentionally not deployed, stop calling the repair API endpoint from your tooling.
  4. Rebuild the server with the full server profile that includes all reconciliation beans.

Example fix

# before — repair service not loaded, API call fails
curl -X POST http://localhost:8080/api/admin/workflow/wf-123/repair
# 500: WorkflowRepairService is disabled.

# after — enable in application.properties
# conductor.app.repairServiceEnabled=true  (check exact property name)
# or ensure the reconciliation module is in the build dependencies
Defensive patterns

Strategy: type-guard

Validate before calling

// Check if repair service is available before calling the API
public boolean isRepairServiceAvailable(AdminService adminService) {
    // The service throws if null — probe safely
    try {
        adminService.verifyAndRepairWorkflowConsistency("__probe__");
        return true;
    } catch (IllegalStateException e) {
        return false;
    }
}

Try / catch

try {
    adminService.verifyAndRepairWorkflowConsistency(workflowId);
} catch (IllegalStateException e) {
    if (e.getMessage().contains("disabled")) {
        // Repair service not deployed — inform user or skip
        LOGGER.warn("WorkflowRepairService is not available in this deployment");
        return false;
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling the admin API endpoint for workflow repair (POST /api/admin/workflow/{workflowId}/repair or similar) when the WorkflowRepairService bean is not on the classpath or not auto-configured. The bean is injected via Optional<WorkflowRepairService>, so its absence doesn't fail startup.

Common situations: Running a minimal Conductor server profile that excludes the reconciliation/sweeper module. The WorkflowRepairService is conditionally loaded (e.g. disabled by a feature flag or property) but an operator or external tool still calls the repair API. Custom server build that omitted the reconciliation module dependency.

Related errors


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