apache/cassandra · error · IllegalArgumentException

Cannot run accord only repair on %s.%s, which isn't configur

Error message

Cannot run accord only repair on %s.%s, which isn't configured for accord operations

What it means

When a repair is requested with accord-only, each repaired table must require/support Accord (metadata.requiresAccordSupport()). RepairCoordinator.validate throws IllegalArgumentException naming the offending keyspace and table.

Source

Thrown at src/java/org/apache/cassandra/repair/RepairCoordinator.java:305

        {
            notifyError(e);
            fail(e.getMessage());
        }
    }

    private static void validate(RepairOption options, List<ColumnFamilyStore> columnFamilies)
    {
        if (options.paxosOnly() && options.accordOnly())
            throw new IllegalArgumentException("Cannot specify a repair as both paxos only and accord only");

        for (ColumnFamilyStore cfs : columnFamilies)
        {
            TableMetadata metadata = cfs.metadata();
            if (options.paxosOnly() && !metadata.supportsPaxosOperations())
                throw new IllegalArgumentException(String.format("Cannot run paxos only repair on %s.%s, which isn't configured for paxos operations", cfs.keyspace.getName(), cfs.name));

            if (options.accordOnly() && !metadata.requiresAccordSupport())
                throw new IllegalArgumentException(String.format("Cannot run accord only repair on %s.%s, which isn't configured for accord operations", cfs.keyspace.getName(), cfs.name));
        }
    }

    private void runMayThrow() throws Throwable
    {
        state.phase.setup();
        ctx.repair().recordRepairStatus(state.cmd, ParentRepairStatus.IN_PROGRESS, ImmutableList.of());

        List<ColumnFamilyStore> columnFamilies = getColumnFamilies();
        validate(state.options, columnFamilies);
        String[] cfnames = columnFamilies.stream().map(cfs -> cfs.name).toArray(String[]::new);

        this.traceState = maybeCreateTraceState(columnFamilies);
        notifyStarting();
        NeighborsAndRanges neighborsAndRanges = getNeighborsAndRanges();

        // We test to validate the start JMX notification is seen before we compute neighbors and ranges
        // but in state (vtable) tracking, we rely on getNeighborsAndRanges to know where we are running repair...

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. List only Accord-enabled tables explicitly in the repair command.
  2. Enable Accord support on the table if it should participate, then retry.
  3. Remove the --accord-only flag and use a standard repair.

Example fix

// before
nodetool repair --accord-only my_ks
// after
nodetool repair --accord-only my_ks accord_table
Defensive patterns

Strategy: validation

Validate before calling

boolean accordSafe = columnFamilies.stream().allMatch(cf -> Schema.instance.getTableMetadata(ks, cf).requiresAccordSupport());

Try / catch

try { repairAsync(ks, accordOnlyOptions); } catch (IllegalArgumentException e) { logger.error("accord-only repair rejected: {}", e.getMessage()); }

Prevention

When it happens

Trigger: Running an accord-only repair that includes a column family not configured for Accord operations.

Common situations: Keyspace-wide accord-only repair over tables that are plain (non-Accord) tables; trial deployments where Accord support was enabled on some tables only.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


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