apache/cassandra · error · ConfigurationException
Invalid configuration, %s (%s) should be less than 70%% of t
Error message
Invalid configuration, %s (%s) should be less than 70%% of the targetSSTableSize (%s)
What it means
The min_sstable_size option must be strictly less than ~70.7% (1/sqrt(2)) of target_sstable_size; validateOptions enforces this so the two sizing options don't conflict. The error reports both values pretty-printed to help compare them.
Source
Thrown at src/java/org/apache/cassandra/db/compaction/unified/Controller.java:633
throw new ConfigurationException(String.format("Invalid overlap inclusion method %s. The valid options are %s.",
s,
Arrays.toString(Overlaps.InclusionMethod.values())));
}
}
s = options.remove(MIN_SSTABLE_SIZE_OPTION);
if (s != null)
{
try
{
long sizeInBytes = FBUtilities.parseHumanReadableBytes(s);
// zero is a valid option to disable feature
if (sizeInBytes < 0)
throw new ConfigurationException(String.format("Invalid configuration, %s should be greater than or equal to 0 (zero)",
MIN_SSTABLE_SIZE_OPTION));
long limit = (long) Math.ceil(targetSSTableSize * INVERSE_SQRT_2);
if (sizeInBytes >= limit)
throw new ConfigurationException(String.format("Invalid configuration, %s (%s) should be less than 70%% of the targetSSTableSize (%s)",
MIN_SSTABLE_SIZE_OPTION,
FBUtilities.prettyPrintMemory(sizeInBytes),
FBUtilities.prettyPrintMemory(targetSSTableSize)));
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s is not a valid size in bytes for %s",
s,
MIN_SSTABLE_SIZE_OPTION),
e);
}
}
s = options.remove(SSTABLE_GROWTH_OPTION);
if (s != null)
{
try
{View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Lower min_sstable_size below 70% of target_sstable_size (e.g. min 100MiB for target 160MiB).
- Raise target_sstable_size so it is more than sqrt(2) times min_sstable_size.
- Set min_sstable_size to 0 to disable the feature and avoid the constraint.
Example fix
// before
{'target_sstable_size': '160MiB', 'min_sstable_size': '200MiB'}
// after
{'target_sstable_size': '160MiB', 'min_sstable_size': '100MiB'} Defensive patterns
Strategy: validation
Validate before calling
long min = FBUtilities.parseHumanReadableBytes(opts.get("min_sstable_size"));
long target = FBUtilities.parseHumanReadableBytes(opts.get("target_sstable_size"));
if (min >= Math.ceil(target / Math.sqrt(2))) throw new IllegalArgumentException("min_sstable_size must be < ~70% of target_sstable_size"); Try / catch
try { applyCompactionOptions(); } catch (ConfigurationException e) { logger.error("min/target size conflict: {}", e.getMessage()); } Prevention
- Always validate min_sstable_size and target_sstable_size as a pair, not independently
- Recheck the pair whenever you change either option
- Use min = 0 (disabled) if the constraint is hard to satisfy
When it happens
Trigger: Setting 'min_sstable_size' >= ceil(target_sstable_size * INVERSE_SQRT_2) in validateOptions, e.g. min 200MiB with target 160MiB.
Common situations: Lowering target_sstable_size later without re-checking min_sstable_size; copying option sets from another table whose target size was much larger.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- Fan factor cannot be lower than 2 in %s
- %s %s is not acceptable, size must be at least %s
- Invalid configuration, %s should be greater than or equal to
- concurrent_compactors should be strictly greater than 0, but
- Could not set new local compaction strategy: <cause message>
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/33496c5d3494c31c.
Report an issue: GitHub.