apache/cassandra · error · ConfigurationException
Invalid value for 'provide_overlapping_tombstones'…
Error message
Invalid value %s for 'provide_overlapping_tombstones' compaction sub-option - must be one of the following [%s].
What it means
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.
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.
Example fix
// before
ALTER TABLE t WITH compaction = {'class':'SizeTieredCompactionStrategy','provide_overlapping_tombstones':'true'};
// after
ALTER TABLE t WITH compaction = {'class':'SizeTieredCompactionStrategy','provide_overlapping_tombstones':'ALLOWED'}; Defensive patterns
Strategy: validation
Validate before calling
Set<String> valid = Arrays.stream(TombstoneOption.values()).map(Enum::name).collect(Collectors.toSet());
if (opt != null && !valid.contains(opt.toUpperCase(Locale.ROOT)))
throw new IllegalArgumentException("provide_overlapping_tombstones must be one of " + valid); Try / catch
try { schema.alterTableWithCompaction(opts); } catch (ConfigurationException e) {
if (e.getMessage().contains("provide_overlapping_tombstones")) {
opts.remove("provide_overlapping_tombstones"); // retry with default
}
} Prevention
- 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.
When it happens
Trigger: ALTER TABLE ... WITH compaction = {'class': '...', 'provide_overlapping_tombstones': '<bad>'} or setting the option programmatically via CompactionParams.fromMap()/create() with a misspelled or unsupported value.
Common situations: 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.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- Invalid overlap inclusion method
- concurrent_compactors should be strictly greater than 0…
- Could not set new local compaction strategy
- Disabling compaction by setting compaction thresholds to 0…
- Fan factor cannot be lower than 2 in
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/231c78b98ae5ade2.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/schema/CompactionParams.java:136
{
this.klass = klass;
this.options = ImmutableMap.copyOf(options);
this.isEnabled = isEnabled;
this.tombstoneOption = tombstoneOption;
this.onlyPurgeRepairedTombstones = Boolean.parseBoolean(options.get(AbstractCompactionStrategy.ONLY_PURGE_REPAIRED_TOMBSTONES));
}
public static CompactionParams create(Class<? extends AbstractCompactionStrategy> klass, Map<String, String> options)
{
boolean isEnabled = options.containsKey(Option.ENABLED.toString())
? Boolean.parseBoolean(options.get(Option.ENABLED.toString()))
: DEFAULT_ENABLED;
String overlappingTombstoneParm = toUpperCaseLocalized(options.getOrDefault(Option.PROVIDE_OVERLAPPING_TOMBSTONES.toString(),
DEFAULT_PROVIDE_OVERLAPPING_TOMBSTONES_PROPERTY_VALUE.toString()));
Optional<TombstoneOption> tombstoneOptional = TombstoneOption.forName(overlappingTombstoneParm);
if (!tombstoneOptional.isPresent())
{
throw new ConfigurationException(format("Invalid value %s for 'provide_overlapping_tombstones' compaction sub-option - must be one of the following [%s].",
overlappingTombstoneParm,
StringUtils.join(TombstoneOption.values(), ", ")));
}
TombstoneOption tombstoneOption = tombstoneOptional.get();
Map<String, String> allOptions = new HashMap<>(options);
if (supportsThresholdParams(klass))
{
allOptions.putIfAbsent(Option.MIN_THRESHOLD.toString(), Integer.toString(DEFAULT_MIN_THRESHOLD));
allOptions.putIfAbsent(Option.MAX_THRESHOLD.toString(), Integer.toString(DEFAULT_MAX_THRESHOLD));
}
return new CompactionParams(klass, allOptions, isEnabled, tombstoneOption);
}
public static CompactionParams stcs(Map<String, String> options)
{
return create(SizeTieredCompactionStrategy.class, options);View on GitHub (pinned to 88fd0f6a0e)