apache/cassandra · error · ConfigurationException

Auto-repair scheduler is disabled.

Error message

Auto-repair scheduler is disabled.

What it means

AutoRepairService.checkCanRun is the gate for executing auto-repair; its first check is the auto-repair scheduling config flag. When auto-repair scheduling is disabled, any checkCanRun call throws ConfigurationException('Auto-repair scheduler is disabled.') regardless of repair type.

Solutions

  1. Enable auto-repair scheduling in cassandra.yaml and restart/reload config
  2. Re-issue the repair request after enabling
  3. Skip auto-repair and run manual repair if scheduling is intentionally disabled

Example fix

// cassandra.yaml
// before
autorepair_scheduling_enabled: false
// after
autorepair_scheduling_enabled: true
Defensive patterns

Strategy: validation

Validate before calling

if (!DatabaseDescriptor.getRawConfig().autorepair_scheduling_enabled)
    throw new IllegalStateException("Enable autorepair_scheduling_enabled before requesting auto-repair");
autoRepairService.checkCanRun(repairType);

Try / catch

try { autoRepairService.checkCanRun(repairType); } catch (ConfigurationException e) { logger.warn("Auto-repair unavailable: {}", e.getMessage()); }

Prevention

When it happens

Trigger: Invoking auto-repair (checkCanRun or the type-specific overloads) on a node where isAutoRepairSchedulingEnabled() returns false in the config.

Common situations: Clusters deployed with auto-repair scheduling off by default; operators triggering repair through tooling/JMX without first enabling the scheduler; post-upgrade configs that reset the flag.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/429b92854f19f598. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/service/AutoRepairService.java:74

    public static void setup()
    {
        instance.config = DatabaseDescriptor.getAutoRepairConfig();
    }

    static
    {
        MBeanWrapper.instance.registerMBean(instance, MBEAN_NAME);
    }

    public void checkCanRun(String repairType)
    {
        checkCanRun(RepairType.parse(repairType));
    }

    public void checkCanRun(RepairType repairType)
    {
        if (!config.isAutoRepairSchedulingEnabled())
            throw new ConfigurationException("Auto-repair scheduler is disabled.");

        if (repairType != RepairType.INCREMENTAL)
            return;

        if (config.getMaterializedViewRepairEnabled(repairType) && DatabaseDescriptor.isMaterializedViewsOnRepairEnabled())
            throw new ConfigurationException("Cannot run incremental repair while materialized view replay is enabled. Set materialized_views_on_repair_enabled to false.");

        if (DatabaseDescriptor.isCDCEnabled() && DatabaseDescriptor.isCDCOnRepairEnabled())
            throw new ConfigurationException("Cannot run incremental repair while CDC replay is enabled. Set cdc_on_repair_enabled to false.");
    }

    public AutoRepairConfig getAutoRepairConfig()
    {
        return config;
    }

    @Override
    public boolean isAutoRepairDisabled()

View on GitHub (pinned to 88fd0f6a0e)