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
- Override setParameter(String,String) in the custom splitter implementation
- Choose a built-in splitter that supports configuration (FixedSplitTokenRangeSplitter or RepairTokenRangeSplitter)
- 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
- Override setParameter in custom splitters that need dynamic updates
- Prefer built-in splitters when runtime reconfiguration is required
- Treat dynamic updates as best-effort in automation scripts
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
- No accord transaction should be executed when…
- %s
- =' ' cannot be greater than =' ' for
- Setting capacity of NopCache is not permitted as this cache…
- Unable to create instance of IAutoRepairTokenRangeSplitter
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)