{"record":{"id":"77c79f7ae15ff040","repo":"apache/cassandra","slug":"properties-specified-s-are-not-understood-by-s","errorCode":null,"errorMessage":"Properties specified %s are not understood by %s","messagePattern":"Properties specified (.+?) are not understood by (.+?)","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/schema/CompactionParams.java","lineNumber":200,"sourceCode":"        String threshold = options.get(Option.MAX_THRESHOLD.toString());\n        return threshold == null\n             ? DEFAULT_MAX_THRESHOLD\n             : Integer.parseInt(threshold);\n    }\n\n    public TombstoneOption tombstoneOption()\n    {\n        return tombstoneOption;\n    }\n\n    public void validate()\n    {\n        try\n        {\n            Map<?, ?> unknownOptions = (Map) klass.getMethod(\"validateOptions\", Map.class).invoke(null, options);\n            if (!unknownOptions.isEmpty())\n            {\n                throw new ConfigurationException(format(\"Properties specified %s are not understood by %s\",\n                                                        unknownOptions.keySet(),\n                                                        klass.getSimpleName()));\n            }\n        }\n        catch (NoSuchMethodException e)\n        {\n            logger.warn(\"Compaction strategy {} does not have a static validateOptions method. Validation ignored\",\n                        klass.getName());\n        }\n        catch (InvocationTargetException e)\n        {\n            if (e.getTargetException() instanceof ConfigurationException)\n                throw (ConfigurationException) e.getTargetException();\n\n            Throwable cause = e.getCause() == null\n                            ? e\n                            : e.getCause();\n","sourceCodeStart":182,"sourceCodeEnd":218,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/schema/CompactionParams.java#L182-L218","documentation":"CompactionParams.validate() reflectively invokes the compaction strategy class's static validateOptions(Map) method and throws ConfigurationException when the strategy reports any unrecognized option keys. It means the compaction map contains sub-options the chosen strategy class does not understand.","triggerScenarios":"ALTER TABLE ... WITH compaction = {'class':'XStrategy', 'unknown_option': 'v'} where XStrategy.validateOptions() returns the unknown key; e.g. using TWCS-only options (compaction_window_unit) with LCS, or legacy option names after a Cassandra upgrade.","commonSituations":"Copy-pasting compaction settings between strategy classes; upgrading Cassandra and using renamed/removed sub-options; typos in option keys like 'min_threshold' vs class-specific names.","solutions":["Remove or correct the keys listed in the message's 'Properties specified [...]' output.","Consult the compaction strategy class (e.g. SizeTieredCompactionStrategy.validateOptions) for the exact supported sub-option names.","After a version upgrade, migrate options to their new names (e.g. check CHANGES.txt for renamed compaction options)."],"exampleFix":"// before\nALTER TABLE t WITH compaction = {'class':'TimeWindowCompactionStrategy','min_threshold':'4'};\n// after\nALTER TABLE t WITH compaction = {'class':'TimeWindowCompactionStrategy','compaction_window_size':'1','compaction_window_unit':'DAYS'};","handlingStrategy":"validation","validationCode":"Map<String, String> unknown = compactionClass.getMethod(\"validateOptions\", Map.class).invoke(null, opts);\nif (!unknown.isEmpty()) throw new IllegalArgumentException(\"Unknown options: \" + unknown.keySet());","typeGuard":null,"tryCatchPattern":"try { applyCompaction(opts); } catch (ConfigurationException e) {\n    logger.warn(\"Rejecting compaction options: {}\", e.getMessage());\n    // fall back to strategy defaults\n}","preventionTips":["Check the strategy's validateOptions for supported keys before applying.","Don't mix options across strategy classes (TWCS vs LCS etc.).","Diff compaction settings against new supported keys after upgrades."],"tags":["cassandra","configuration","compaction","reflection"],"backgroundTag":"unsupported-config-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}