{"record":{"id":"231c78b98ae5ade2","repo":"apache/cassandra","slug":"invalid-value-s-for-provide-overlapping-tombston","errorCode":null,"errorMessage":"Invalid value %s for 'provide_overlapping_tombstones' compaction sub-option - must be one of the following [%s].","messagePattern":"Invalid value (.+?) for 'provide_overlapping_tombstones' compaction sub-option - must be one of the following \\[(.+?)\\]\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/schema/CompactionParams.java","lineNumber":136,"sourceCode":"    {\n        this.klass = klass;\n        this.options = ImmutableMap.copyOf(options);\n        this.isEnabled = isEnabled;\n        this.tombstoneOption = tombstoneOption;\n        this.onlyPurgeRepairedTombstones = Boolean.parseBoolean(options.get(AbstractCompactionStrategy.ONLY_PURGE_REPAIRED_TOMBSTONES));\n    }\n\n    public static CompactionParams create(Class<? extends AbstractCompactionStrategy> klass, Map<String, String> options)\n    {\n        boolean isEnabled = options.containsKey(Option.ENABLED.toString())\n                          ? Boolean.parseBoolean(options.get(Option.ENABLED.toString()))\n                          : DEFAULT_ENABLED;\n        String overlappingTombstoneParm = toUpperCaseLocalized(options.getOrDefault(Option.PROVIDE_OVERLAPPING_TOMBSTONES.toString(),\n                                                               DEFAULT_PROVIDE_OVERLAPPING_TOMBSTONES_PROPERTY_VALUE.toString()));\n        Optional<TombstoneOption> tombstoneOptional = TombstoneOption.forName(overlappingTombstoneParm);\n        if (!tombstoneOptional.isPresent())\n        {\n            throw new ConfigurationException(format(\"Invalid value %s for 'provide_overlapping_tombstones' compaction sub-option - must be one of the following [%s].\",\n                                                    overlappingTombstoneParm,\n                                                    StringUtils.join(TombstoneOption.values(), \", \")));\n        }\n        TombstoneOption tombstoneOption = tombstoneOptional.get();\n\n        Map<String, String> allOptions = new HashMap<>(options);\n        if (supportsThresholdParams(klass))\n        {\n            allOptions.putIfAbsent(Option.MIN_THRESHOLD.toString(), Integer.toString(DEFAULT_MIN_THRESHOLD));\n            allOptions.putIfAbsent(Option.MAX_THRESHOLD.toString(), Integer.toString(DEFAULT_MAX_THRESHOLD));\n        }\n\n        return new CompactionParams(klass, allOptions, isEnabled, tombstoneOption);\n    }\n\n    public static CompactionParams stcs(Map<String, String> options)\n    {\n        return create(SizeTieredCompactionStrategy.class, options);","sourceCodeStart":118,"sourceCodeEnd":154,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/schema/CompactionParams.java#L118-L154","documentation":"Thrown by CompactionParams.create() when the compaction sub-option 'provide_overlapping_tombstones' has a value that is not a valid TombstoneOption enum name. Cassandra parses the string (case-insensitively, after uppercasing) into a TombstoneOption and rejects anything unrecognized.","triggerScenarios":"ALTER TABLE ... WITH compaction = {'class': '...', 'provide_overlapping_tombstones': '<bad>'} or setting the option programmatically via CompactionParams.fromMap()/create() with a misspelled or unsupported value.","commonSituations":"Typo like 'true'/'false' instead of a valid TombstoneOption value; copying config from another Cassandra version that allowed a different value set; generated config tooling emitting boolean strings.","solutions":["Set the option to one of the values printed in the message, e.g. 'UNRECOGNIZED', 'DISABLED' or 'ALLOWED' (check TombstoneOption.values() for your version).","If you meant a boolean, remove the option entirely and use the default.","Run cqlsh DESCRIBE / check the compaction class docs for supported sub-options of your STCS/LCS/UCS/TWCS class.","Fix the config-management template that emits the wrong literal."],"exampleFix":"// before\nALTER TABLE t WITH compaction = {'class':'SizeTieredCompactionStrategy','provide_overlapping_tombstones':'true'};\n// after\nALTER TABLE t WITH compaction = {'class':'SizeTieredCompactionStrategy','provide_overlapping_tombstones':'ALLOWED'};","handlingStrategy":"validation","validationCode":"Set<String> valid = Arrays.stream(TombstoneOption.values()).map(Enum::name).collect(Collectors.toSet());\nif (opt != null && !valid.contains(opt.toUpperCase(Locale.ROOT)))\n    throw new IllegalArgumentException(\"provide_overlapping_tombstones must be one of \" + valid);","typeGuard":null,"tryCatchPattern":"try { schema.alterTableWithCompaction(opts); } catch (ConfigurationException e) {\n    if (e.getMessage().contains(\"provide_overlapping_tombstones\")) {\n        opts.remove(\"provide_overlapping_tombstones\"); // retry with default\n    }\n}","preventionTips":["Use TombstoneOption enum names (e.g. ALLOWED/DISABLED/UNRECOGNIZED), never true/false.","Validate compaction option maps against TombstoneOption before applying ALTERs.","Keep config templates per Cassandra version."],"tags":["cassandra","configuration","compaction","enum"],"backgroundTag":"invalid-enum-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"}