{"record":{"id":"8da1baaa2c78f26f","repo":"apache/cassandra","slug":"unknown-property-s-8da1ba","errorCode":null,"errorMessage":"Unknown property '%s'","messagePattern":"Unknown property '(.+?)'","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/schema/AutoRepairParams.java","lineNumber":82,"sourceCode":"\n    AutoRepairParams(Map<String, String> options)\n    {\n        this.options = ImmutableMap.copyOf(options);\n    }\n\n    public static final AutoRepairParams DEFAULT =\n    new AutoRepairParams(DEFAULT_OPTIONS);\n\n    public static AutoRepairParams create(Map<String, String> options)\n    {\n        Map<String, String> optionsMap = new TreeMap<>(DEFAULT_OPTIONS);\n        if (options != null)\n        {\n            for (Map.Entry<String, String> entry : options.entrySet())\n            {\n                if (Arrays.stream(Option.values()).noneMatch(option -> option.toString().equalsIgnoreCase(entry.getKey())))\n                {\n                    throw new ConfigurationException(format(\"Unknown property '%s'\", entry.getKey()));\n                }\n                optionsMap.put(entry.getKey(), entry.getValue());\n            }\n        }\n        return new AutoRepairParams(optionsMap);\n    }\n\n    public boolean repairEnabled(AutoRepairConfig.RepairType type)\n    {\n        String option = LocalizeString.toLowerCaseLocalized(type.toString()) + \"_enabled\";\n        String enabled = options.getOrDefault(option, DEFAULT_OPTIONS.get(option));\n        return Boolean.parseBoolean(enabled);\n    }\n\n    public int priority()\n    {\n        String priority = options.getOrDefault(Option.PRIORITY.toString(), DEFAULT_OPTIONS.get(Option.PRIORITY.toString()));\n        return Integer.parseInt(priority);","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/schema/AutoRepairParams.java#L64-L100","documentation":"AutoRepairParams.create parses the table-level auto repair options map and rejects any key not matching one of the known Option enum values (case-insensitively). ConfigurationException is thrown because an unrecognized auto-repair property was supplied, typically via CREATE/ALTER TABLE ... WITH auto_repair = {...}.","triggerScenarios":"Executing CREATE TABLE / ALTER TABLE with an auto_repair options map containing a typo'd or unknown key, e.g. {'full_enable': 'true'} instead of 'full_enabled'.","commonSituations":"Typos in CQL schema statements; copying option names from docs of a different version; camelCase vs snake_case confusion (only enum-name case-insensitive matching is done).","solutions":["Check the Option enum in AutoRepairParams.java and use exactly those key names","Fix the typo in the WITH auto_repair options map","Verify the option exists in your Cassandra version (newer options won't parse on older builds)"],"exampleFix":"// before\nALTER TABLE ks.tbl WITH auto_repair = {'full_enable': 'true'};\n// after\nALTER TABLE ks.tbl WITH auto_repair = {'full_enabled': 'true'};","handlingStrategy":"validation","validationCode":"Set<String> known = Arrays.stream(Option.values()).map(o -> o.toString().toLowerCase()).collect(Collectors.toSet());\nfor (String key : autoRepairOptions.keySet())\n    if (!known.contains(key.toLowerCase())) throw new IllegalArgumentException(\"Unknown auto repair option: \" + key);","typeGuard":null,"tryCatchPattern":"try { AutoRepairParams.create(opts); } catch (ConfigurationException e) { if (e.getMessage().startsWith(\"Unknown property\")) { /* correct the key name and retry */ } else throw e; }","preventionTips":["Generate option keys from the Option enum, not string literals","Keep a versioned allowlist of auto repair keys per Cassandra release","Validate CQL schema statements in CI before applying"],"tags":["schema","configuration","auto-repair"],"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"}