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

  1. Remove the options for that check from cassandra.yaml
  2. Only configure checks whose isConfigurable() returns true
  3. 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

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


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/0d28b3bbc7ab70e2. Report an issue: GitHub.