apache/cassandra · error · IllegalStateException
There are configuration entries for startup checks which are
Error message
There are configuration entries for startup checks which are not configurable: <notConfigurableCheckNames>
What it means
StartupChecksConfiguration.apply() also rejects configuration for checks that exist but are not configurable (isConfigurable() == false). Throwing IllegalStateException stops startup, since operator-provided options could never take effect for such a check.
Source
Thrown at src/java/org/apache/cassandra/config/StartupChecksConfiguration.java:129
private void apply()
{
List<String> notExistingCheckNames = new ArrayList<>();
List<String> notConfigurableCheckNames = new ArrayList<>();
for (Map.Entry<String, Map<String, Object>> userConfigEntry : options.entrySet())
{
String key = userConfigEntry.getKey();
StartupCheck check = startupChecks.getCheck(key);
if (check == null)
notExistingCheckNames.add(key);
else if (!check.isConfigurable())
notConfigurableCheckNames.add(key);
}
if (!notExistingCheckNames.isEmpty())
throw new IllegalStateException("There are configuration entries for startup checks which do not exist: " + notExistingCheckNames);
if (!notConfigurableCheckNames.isEmpty())
throw new IllegalStateException("There are configuration entries for startup checks which are not configurable: " + notConfigurableCheckNames);
for (StartupCheck check : startupChecks.getChecks())
{
String startupCheckName = check.name();
Map<String, Object> configMap = this.options.computeIfAbsent(startupCheckName, k -> new HashMap<>());
if (configMap.containsKey(ENABLED_PROPERTY))
configMap.putIfAbsent(ENABLED_PROPERTY, FALSE);
else if (check.isDisabledByDefault())
configMap.put(ENABLED_PROPERTY, FALSE);
else
configMap.put(ENABLED_PROPERTY, TRUE);
}
}
public void verify() throws StartupException
{
assert startupChecks != null;
startupChecks.verify(this);View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Remove the options for that check from cassandra.yaml
- Only configure checks whose isConfigurable() returns true
- If you need the check configurable, implement it as configurable in its source
Example fix
# before
startup_checks:
always_on_check:
enabled: true
# after (check is not configurable)
startup_checks: {} Defensive patterns
Strategy: validation
Validate before calling
for (Map.Entry<String, Map<String,Object>> e : yaml.startup_checks.entrySet()) {
StartupCheck c = findCheck(e.getKey());
if (c != null && !c.isConfigurable() && !e.getValue().isEmpty())
throw new IllegalArgumentException(e.getKey() + " is not configurable");
} Try / catch
try { startupChecksConfiguration.apply(); }
catch (IllegalStateException e) { log.error("Remove options for non-configurable checks: {}", e.getMessage()); throw e; } Prevention
- Check isConfigurable() before documenting/adding options for a check
- Avoid copy-pasting option blocks between different checks
- Verify check configurability after version upgrades
When it happens
Trigger: cassandra.yaml supplies startup_checks.<name> options where <name> is a valid check that does not accept configuration.
Common situations: Configuring a fixed, always-on check assuming it accepts options; a check changed to non-configurable in an upgrade while old config remains; copy-pasted config blocks between checks.
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
- Invalid value of entire_sstable_stream_throughput_outbound:
- Invalid value of entire_sstable_inter_dc_stream_throughput_o
- There are configuration entries for startup checks which do
- Commit log flush interval must be positive: %fms
- %s has authorization enabled which requires %s to enable aut
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/0d28b3bbc7ab70e2.
Report an issue: GitHub.