{"record":{"id":"cbc7538639426193","repo":"apache/cassandra","slug":"s-does-not-support-custom-configuration","errorCode":null,"errorMessage":"%s does not support custom configuration","messagePattern":"(.+?) does not support custom configuration","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/repair/autorepair/IAutoRepairTokenRangeSplitter.java","lineNumber":60,"sourceCode":"     * The autorepair framework will repair the assignments from returned subrange iterator in the sequence it's\n     * provided.\n     * @param primaryRangeOnly Whether to repair only this node's primary ranges or all of its ranges.\n     * @param repairPlans A list of ordered prioritized repair plans to generate assignments for in order.\n     * @return iterator of repair assignments, with each element representing a grouping of repair assignments for a given keyspace.\n     * The iterator is traversed lazily {@link KeyspaceRepairAssignments} at a time with the intent to try to get the\n     * most up-to-date representation of your data (e.g. how much data exists and is unrepaired at a given time).\n     */\n    Iterator<KeyspaceRepairAssignments> getRepairAssignments(boolean primaryRangeOnly, List<PrioritizedRepairPlan> repairPlans);\n\n    /**\n     * Update a configuration parameter.  This is meant to be used by <code>nodetool setautorepairconfig</code> to\n     * update configuration dynamically.\n     * @param key parameter to update\n     * @param value The value to set to.\n     */\n    default void setParameter(String key, String value)\n    {\n        throw new IllegalArgumentException(this.getClass().getName() + \" does not support custom configuration\");\n    }\n\n    /**\n     * @return custom configuration.  This is meant to be used by <code>nodetool getautorepairconfig</code> for\n     * retrieving the splitter configuration.\n     */\n    default Map<String, String> getParameters()\n    {\n        return Collections.emptyMap();\n    }\n}\n","sourceCodeStart":42,"sourceCodeEnd":72,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/repair/autorepair/IAutoRepairTokenRangeSplitter.java#L42-L72","documentation":"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.","triggerScenarios":"Calling setParameter on a custom IAutoRepairTokenRangeSplitter implementation that did not override it — e.g. via nodetool setautorepairconfig against a custom splitter class.","commonSituations":"Deploying a custom splitter while assuming dynamic reconfiguration support; applying config updates to all splitter types indiscriminately in scripts.","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"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if (!splitter.getClass().equals(FixedSplitTokenRangeSplitter.class) &&\n    !splitter.getClass().equals(RepairTokenRangeSplitter.class))\n    logger.warn(\"{} may not support dynamic setParameter\", splitter.getClass().getName());","typeGuard":null,"tryCatchPattern":"try { splitter.setParameter(key, value); }\ncatch (IllegalArgumentException e) {\n    if (e.getMessage().endsWith(\"does not support custom configuration\"))\n        logger.warn(\"Splitter {} not dynamically configurable; update cassandra.yaml instead\", splitter.getClass().getName());\n    else throw e;\n}","preventionTips":["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"],"tags":["autorepair","unsupported-operation","configuration"],"backgroundTag":"unsupported-operation","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}