{"record":{"id":"f84fd64399dd954c","repo":"apache/cassandra","slug":"unexpected-parameter-s-must-be-one-of-s","errorCode":null,"errorMessage":"Unexpected parameter '%s', must be one of %s","messagePattern":"Unexpected parameter '(.+?)', must be one of (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/repair/autorepair/RepairTokenRangeSplitter.java","lineNumber":625,"sourceCode":"            Iterable<SSTableReader> sstables = cfs.getTracker().getView().select(SSTableSet.CANONICAL);\n            SSTableIntervalTree tree = SSTableIntervalTree.buildSSTableIntervalTree(ImmutableList.copyOf(sstables));\n            Range<PartitionPosition> r = Range.makeRowRange(tokenRange);\n            List<SSTableReader> canonicalSSTables = View.sstablesInBounds(r.left, r.right, tree);\n            if (repairType == AutoRepairConfig.RepairType.INCREMENTAL)\n            {\n                canonicalSSTables = canonicalSSTables.stream().filter((sstable) -> !sstable.isRepaired()).collect(Collectors.toList());\n            }\n            refs = Refs.tryRef(canonicalSSTables);\n        }\n        return refs;\n    }\n\n    @Override\n    public void setParameter(String key, String value)\n    {\n        if (!PARAMETERS.contains(key))\n        {\n            throw new IllegalArgumentException(\"Unexpected parameter '\" + key + \"', must be one of \" + PARAMETERS);\n        }\n\n        logger.info(\"Setting {} to {} for repair type {}\", key, value, repairType);\n        givenParameters.put(key, value);\n        reinitParameters();\n    }\n\n    @Override\n    public Map<String, String> getParameters()\n    {\n        final Map<String, String> parameters = new LinkedHashMap<>();\n        for (String parameter : PARAMETERS)\n        {\n            // Use the parameter as provided if present.\n            if (givenParameters.containsKey(parameter))\n            {\n                parameters.put(parameter, givenParameters.get(parameter));\n                continue;","sourceCodeStart":607,"sourceCodeEnd":643,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/repair/autorepair/RepairTokenRangeSplitter.java#L607-L643","documentation":"RepairTokenRangeSplitter.setParameter validates the key against the PARAMETERS set and throws IllegalArgumentException listing all accepted keys when the key is unknown. After validation it records the value and re-runs reinitParameters.","triggerScenarios":"Dynamic auto-repair config update with a key not in PARAMETERS (e.g. typo like bytes_per_assigment, or a FixedSplit-only key such as number_of_subranges).","commonSituations":"Typos in nodetool setautorepairconfig or cassandra.yaml; copying keys between the two splitter implementations; older config keys removed after upgrade.","solutions":["Use only keys in the splitter's PARAMETERS set (bytes_per_assignment, max_bytes_per_schedule, ...)","Read the accepted list printed in the error message","Run nodetool getautorepairconfig to see current valid configuration","Fix spelling and re-apply the update"],"exampleFix":"// before\nsplitter.setParameter(\"bytes_per_assigment\", \"1GB\");\n// after\nsplitter.setParameter(\"bytes_per_assignment\", \"1GB\");","handlingStrategy":"validation","validationCode":"Set<String> ALLOWED = Set.of(\"bytes_per_assignment\",\"max_bytes_per_schedule\");\nif (!ALLOWED.contains(key))\n    throw new IllegalArgumentException(\"Key \" + key + \" not in \" + ALLOWED);","typeGuard":null,"tryCatchPattern":"try { splitter.setParameter(key, value); }\ncatch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Unexpected parameter\"))\n        logger.warn(\"Unknown auto-repair param {}; accepted list: {}\", key, e.getMessage());\n    else throw e;\n}","preventionTips":["Copy parameter names exactly from the error's accepted list","Don't reuse FixedSplit keys on RepairTokenRangeSplitter","Validate config keys against PARAMETERS before dynamic updates"],"tags":["autorepair","configuration","parameter-validation"],"backgroundTag":"invalid-config-value","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"}