apache/cassandra · error · IllegalArgumentException

Cannot run paxos only repair on %s.%s, which isn't configure

Error message

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

What it means

When a repair is requested with paxos-only, every repaired table must support paxos operations (per TableMetadata). RepairCoordinator.validate throws IllegalArgumentException naming the keyspace/table that is not paxos-enabled.

Source

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

            skip(e.getMessage());
        }
        catch (Throwable e)
        {
            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();

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Restrict the repair's column families to paxos-enabled tables only.
  2. Enable paxos support on the table if appropriate, then retry.
  3. Drop the --paxos-only flag and run a normal repair instead.

Example fix

// before
nodetool repair --paxos-only my_ks
// after
nodetool repair --paxos-only my_ks paxos_enabled_table
Defensive patterns

Strategy: validation

Validate before calling

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

Try / catch

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

Prevention

When it happens

Trigger: Running a paxos-only repair that includes a column family whose metadata reports supportsPaxosOperations() == false (e.g. a table without conditionally-updateable semantics or with paxos disabled).

Common situations: Issuing keyspace-wide paxos-only repair where one table in the keyspace is not paxos-enabled; scripts that assume all tables in a keyspace share paxos support.

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/8cab56b10b2e5cd0. Report an issue: GitHub.