apache/cassandra · error · ConfigurationException
%s value (%s) is less than or equal to the %s value (%s)
Error message
%s value (%s) is less than or equal to the %s value (%s)
What it means
ConfigurationException thrown when the size-tiered bucketing bounds are inverted: bucket_high must be strictly greater than bucket_low. These multipliers define the size range for grouping similarly sized SSTables, so high <= low makes bucketing undefined and is rejected during option validation.
Source
Thrown at src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategyOptions.java:87
String optionValue = options.get(MIN_SSTABLE_SIZE_KEY);
try
{
long minSSTableSize = optionValue == null ? DEFAULT_MIN_SSTABLE_SIZE : Long.parseLong(optionValue);
if (minSSTableSize < 0)
{
throw new ConfigurationException(String.format("%s must be non negative: %d", MIN_SSTABLE_SIZE_KEY, minSSTableSize));
}
}
catch (NumberFormatException e)
{
throw new ConfigurationException(String.format("%s is not a parsable int (base10) for %s", optionValue, MIN_SSTABLE_SIZE_KEY), e);
}
double bucketLow = parseDouble(options, BUCKET_LOW_KEY, DEFAULT_BUCKET_LOW);
double bucketHigh = parseDouble(options, BUCKET_HIGH_KEY, DEFAULT_BUCKET_HIGH);
if (bucketHigh <= bucketLow)
{
throw new ConfigurationException(String.format("%s value (%s) is less than or equal to the %s value (%s)",
BUCKET_HIGH_KEY, bucketHigh, BUCKET_LOW_KEY, bucketLow));
}
uncheckedOptions.remove(MIN_SSTABLE_SIZE_KEY);
uncheckedOptions.remove(BUCKET_LOW_KEY);
uncheckedOptions.remove(BUCKET_HIGH_KEY);
return uncheckedOptions;
}
@Override
public String toString()
{
return String.format("Min sstable size: %d, bucket low: %f, bucket high: %f", minSSTableSize, bucketLow, bucketHigh);
}
}
View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Set bucket_high strictly greater than bucket_low (defaults: bucket_low='0.5', bucket_high='1.5').
- Remove both options to revert to defaults.
- Add validation in any auto-tuning tool that enforces bucket_high > bucket_low before applying.
Example fix
// before
{'bucket_low':'1.5','bucket_high':'1.5'}
// after
{'bucket_low':'0.5','bucket_high':'1.5'} Defensive patterns
Strategy: validation
Validate before calling
double low = Double.parseDouble(opts.getOrDefault("bucket_low", "0.5"));
double high = Double.parseDouble(opts.getOrDefault("bucket_high", "1.5"));
if (high <= low) throw new IllegalArgumentException("bucket_high must be > bucket_low"); Try / catch
try { schema.alterTable(cql); } catch (ConfigurationException e) { if (e.getMessage().contains("less than or equal to")) { /* swap/correct bounds and retry */ } else throw e; } Prevention
- Keep defaults 0.5/1.5 unless you have measured reason to change them.
- In auto-tuning tools, enforce high > low before writing options.
- Verify key order when copy-pasting bucket_low/bucket_high pairs.
When it happens
Trigger: CREATE/ALTER TABLE with bucket_high <= bucket_low, e.g. {'bucket_low':'1.5','bucket_high':'1.5'} or {'bucket_low':'1.5','bucket_high':'0.5'}.
Common situations: Copy-paste swapping the two keys; automated tuning experiments writing values that converge to equality; misunderstanding that these are ratios, not absolute sizes.
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
- %s must be greater than 0, but was %f
- %s is not a parsable int (base10) for %s
- %s must be non negative: %d
- Fan factor cannot be lower than 2 in %s
- %s %s is not acceptable, size must be at least %s
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/6eada8996848f364.
Report an issue: GitHub.