apache/cassandra · error · IllegalStateException
There are configuration entries for startup checks which do
Error message
There are configuration entries for startup checks which do not exist: <notExistingCheckNames>
What it means
StartupChecksConfiguration.apply() validates the startup_checks config section against the registered StartupCheck implementations. If a config key names a check that does not exist, it throws IllegalStateException, preventing Cassandra from starting with an unknown/misspelled check configuration.
Source
Thrown at src/java/org/apache/cassandra/config/StartupChecksConfiguration.java:127
}
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
{View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Correct the check name in cassandra.yaml to match a registered StartupCheck.name()
- Remove the stale startup_checks entry for the non-existent check
- Verify the jar providing the custom check is on the classpath
Example fix
# before
startup_checks:
check_rack: {}
# after (check_rack does not exist)
startup_checks:
data_directories: {} Defensive patterns
Strategy: validation
Validate before calling
Set<String> known = StartupChecksConfiguration.getStartupChecks().stream()
.map(StartupCheck::name).collect(Collectors.toSet());
Set<String> configured = yaml.startup_checks.keySet();
Set<String> unknown = new HashSet<>(configured); unknown.removeAll(known);
if (!unknown.isEmpty()) throw new IllegalArgumentException("Unknown startup checks: " + unknown); Try / catch
try { startupChecksConfiguration.apply(); }
catch (IllegalStateException e) { log.error("Fix cassandra.yaml startup_checks: {}", e.getMessage()); throw e; } Prevention
- Only add startup_checks entries whose names match registered StartupCheck.name()
- After upgrades, re-audit startup_checks config against available checks
- Keep custom check jars and their config entries in sync
When it happens
Trigger: cassandra.yaml contains startup_checks.<name> where <name> matches no registered StartupCheck — e.g. a typo or a check from a removed/never-installed plugin.
Common situations: Misspelling a check name in cassandra.yaml; copying config referencing checks that exist only in a fork or newer version; removing a custom check jar but leaving its config.
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 are
- 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/3ab19840926abec1.
Report an issue: GitHub.