apache/cassandra · error · IllegalArgumentException

does not support custom configuration

Error message

%s does not support custom configuration

What it means

The IAutoRepairTokenRangeSplitter interface's default setParameter throws IllegalArgumentException '<class> does not support custom configuration'. Splitters that do not override setParameter (unlike FixedSplitTokenRangeSplitter or RepairTokenRangeSplitter) reject any runtime parameter update.

Solutions

  1. Override setParameter(String,String) in the custom splitter implementation
  2. Choose a built-in splitter that supports configuration (FixedSplitTokenRangeSplitter or RepairTokenRangeSplitter)
  3. Update the splitter's config in cassandra.yaml and restart instead of dynamic updates
Defensive patterns

Strategy: try-catch

Validate before calling

if (!splitter.getClass().equals(FixedSplitTokenRangeSplitter.class) &&
    !splitter.getClass().equals(RepairTokenRangeSplitter.class))
    logger.warn("{} may not support dynamic setParameter", splitter.getClass().getName());

Try / catch

try { splitter.setParameter(key, value); }
catch (IllegalArgumentException e) {
    if (e.getMessage().endsWith("does not support custom configuration"))
        logger.warn("Splitter {} not dynamically configurable; update cassandra.yaml instead", splitter.getClass().getName());
    else throw e;
}

Prevention

When it happens

Trigger: Calling setParameter on a custom IAutoRepairTokenRangeSplitter implementation that did not override it — e.g. via nodetool setautorepairconfig against a custom splitter class.

Common situations: Deploying a custom splitter while assuming dynamic reconfiguration support; applying config updates to all splitter types indiscriminately in scripts.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at src/java/org/apache/cassandra/repair/autorepair/IAutoRepairTokenRangeSplitter.java:60

     * The autorepair framework will repair the assignments from returned subrange iterator in the sequence it's
     * provided.
     * @param primaryRangeOnly Whether to repair only this node's primary ranges or all of its ranges.
     * @param repairPlans A list of ordered prioritized repair plans to generate assignments for in order.
     * @return iterator of repair assignments, with each element representing a grouping of repair assignments for a given keyspace.
     * The iterator is traversed lazily {@link KeyspaceRepairAssignments} at a time with the intent to try to get the
     * most up-to-date representation of your data (e.g. how much data exists and is unrepaired at a given time).
     */
    Iterator<KeyspaceRepairAssignments> getRepairAssignments(boolean primaryRangeOnly, List<PrioritizedRepairPlan> repairPlans);

    /**
     * Update a configuration parameter.  This is meant to be used by <code>nodetool setautorepairconfig</code> to
     * update configuration dynamically.
     * @param key parameter to update
     * @param value The value to set to.
     */
    default void setParameter(String key, String value)
    {
        throw new IllegalArgumentException(this.getClass().getName() + " does not support custom configuration");
    }

    /**
     * @return custom configuration.  This is meant to be used by <code>nodetool getautorepairconfig</code> for
     * retrieving the splitter configuration.
     */
    default Map<String, String> getParameters()
    {
        return Collections.emptyMap();
    }
}

View on GitHub (pinned to 88fd0f6a0e)