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

RepairJob's constructor also validates Accord support: if the session requested accord-only repair (repairData=false and repairPaxos=false) but the table metadata does not require/enable Accord support, an IllegalArgumentException is thrown. Accord-only repair is only valid for Accord-configured tables.

Source

Thrown at src/java/org/apache/cassandra/repair/RepairJob.java:128

     * @param columnFamily name of the ColumnFamily to repair
     */
    public RepairJob(RepairSession session, String columnFamily)
    {
        this.ctx = session.ctx;
        this.session = session;
        this.taskExecutor = session.taskExecutor;
        this.parallelismDegree = session.parallelismDegree;
        this.desc = new RepairJobDesc(session.state.parentRepairSession, session.getId(), session.state.keyspace, columnFamily, session.state.commonRange.ranges);
        this.ks = Keyspace.open(desc.keyspace);
        this.cfs = ks.getColumnFamilyStore(columnFamily);
        this.state = new JobState(ctx.clock(), desc, session.state.commonRange.endpoints);

        TableMetadata metadata = this.cfs.metadata();
        if ((!session.repairData && !session.repairAccord) && !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 ((!session.repairData && !session.repairPaxos) && !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));

    }

    public long getNowInSeconds()
    {
        long nowInSeconds = ctx.clock().nowInSeconds();
        if (session.previewKind == PreviewKind.REPAIRED)
        {
            return nowInSeconds + DatabaseDescriptor.getValidationPreviewPurgeHeadStartInSec();
        }
        else
        {
            return nowInSeconds;
        }
    }

    @Override
    public void run()

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Run a normal data repair on tables that are not Accord-enabled
  2. Restrict --repair-accord to tables created with Accord support
  3. Remove the --repair-accord flag so repairData is used

Example fix

// before
nodetool repair --repair-accord ks cf
// after
nodetool repair ks cf  // or enable Accord support on the table
Defensive patterns

Strategy: validation

Validate before calling

TableMetadata metadata = Schema.instance.getTableMetadata(keyspace, table);
if (metadata != null && !metadata.requiresAccordSupport())
    throw new IllegalArgumentException(keyspace + "." + table + " is not Accord-enabled; use a normal repair");

Try / catch

try { session.submitRepair(...); }
catch (IllegalArgumentException e) {
    if (e.getMessage().contains("accord only repair")) logger.warn("Skipping non-accord table", e);
    else throw e;
}

Prevention

When it happens

Trigger: Running `nodetool repair --repair-accord` on a table whose metadata.requiresAccordSupport() is false.

Common situations: Repairs scripted over all keyspaces/tables where only some tables are Accord-enabled; experimenting with Accord flags on legacy tables; upgrades missing accord table options.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


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