apache/cassandra · error · ConfigurationException
Invalid configuration for cms_commit_retry_strategy.
Error message
Invalid configuration for cms_commit_retry_strategy.
What it means
DatabaseDescriptor.applySimpleConfig failed to parse the cms_commit_retry_strategy setting from cassandra.yaml. The value is validated by RetryStrategy.parse(), and any exception during parsing (bad class name, bad parameters, invalid max retries/latency spec) is wrapped into a ConfigurationException. The nested exception's message is appended to explain exactly which part of the spec was rejected.
Source
Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:1440
AccordService.applyProtocolModifiers(getAccord());
}
private static void applyCMS()
{
try
{
long initialDelayMs = conf.cms_commit_retry_initial_delay.to(TimeUnit.MILLISECONDS);
long maxDelayMs = conf.cms_commit_retry_max_delay.to(TimeUnit.MILLISECONDS);
// range of backoff wait time starts at 0ms backing off exponentially at initialDelayMs * 2^attempts
String spec = String.format("0ms ... %dms * 2^attempts <= %dms", initialDelayMs, maxDelayMs);
logger.debug("Initializing cms_commit_retry_strategy from spec: " + spec);
cms_commit_retry_strategy = RetryStrategy.parse(spec,
TimeoutStrategy.LatencySourceFactory.none(),
RetryStrategy.randomizers.uniform());
}
catch (Exception e)
{
throw new ConfigurationException("Invalid configuration for cms_commit_retry_strategy. " + e.getMessage(), e);
}
}
public static StartupChecksConfiguration getStartupChecksConfiguration()
{
return startupChecksConfiguration;
}
private static void applyStartupChecks()
{
try
{
StartupChecks startupChecks = new StartupChecks().withDefaultTests().withTest(new FileSystemOwnershipCheck()).withServiceLoaderTests();
startupChecksConfiguration = new StartupChecksConfiguration(startupChecks, conf.startup_checks);
}
catch (Throwable t)
{
throw new ConfigurationException("Invalid configuration of startup_checks: " + t.getMessage());View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Read the nested cause message in the error text; it names the exact parse failure.
- Fix cms_commit_retry_strategy in cassandra.yaml to a valid RetryStrategy spec (e.g. the default exponential form) or remove the key to use the default.
- Check config/ or the cassandra.yaml shipped with your version for the documented syntax of cms_commit_retry_strategy.
Example fix
// before (cassandra.yaml)
cms_commit_retry_strategy:
- class_name: Exponetial
max_attempts: 8
// after
cms_commit_retry_strategy:
- class_name: Exponential
max_attempts: 8 Defensive patterns
Strategy: validation
Validate before calling
// before start, validate the yaml value parses
String spec = yaml.getString("cms_commit_retry_strategy");
if (spec != null) {
try { RetryStrategy.parse(spec, TimeoutStrategy.LatencySourceFactory.none(), RetryStrategy.randomizers.uniform()); }
catch (Exception e) { throw new IllegalArgumentException("cms_commit_retry_strategy invalid: " + e.getMessage()); }
} Try / catch
catch (ConfigurationException e) { logger.error("Fix cms_commit_retry_strategy in cassandra.yaml: {}", e.getMessage()); throw e; } Prevention
- Copy the retry-strategy example from the shipped cassandra.yaml of your exact version
- Prefer omitting the key to accept the default
- Lint cassandra.yaml in CI with a schema/parse check
When it happens
Trigger: cassandra.yaml contains a cms_commit_retry_strategy entry whose spec string cannot be parsed by RetryStrategy.parse(), e.g. an unknown strategy name, malformed parameter list, or invalid retry/timeout values.
Common situations: Hand-edited cassandra.yaml with a typo in the strategy name; copying a retry spec from another subsystem (like request retries) that uses a different format; upgrading Cassandra to a version where cms_commit_retry_strategy was introduced and guessing its syntax.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- memtable_cleanup_threshold must be >= 0.01, but was ${conf.m
- memtable_cleanup_threshold must be <= 0.99, but was ${conf.m
- native_transport_max_message_size must not exceed native_tra
- Set listen_address OR listen_interface, not both
- Only {} free in the system data volume. Consider adding more
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/ca1fd7258075476c.
Report an issue: GitHub.