apache/cassandra · error · ConfigurationException

Invalid yaml. Those properties

Error message

Invalid yaml. Those properties <nullProperties> are not valid

What it means

The PropertiesChecker walks the parsed YAML property tree against the Config class schema; keys whose value resolves to null because the property name does not exist on Config (or is a removed/dead property) are collected in nullProperties. check() then throws this ConfigurationException, so Cassandra fails fast instead of silently ignoring unknown configuration keys.

Solutions

  1. Remove or correct the listed properties in cassandra.yaml — the message names exactly which keys are invalid
  2. Check the Config class / cassandra documentation for the correct key spelling
  3. If a key was removed during an upgrade, delete it or replace it with its documented replacement
  4. Keep only keys that exist in the Config schema for your Cassandra version

Example fix

// before (cassandra.yaml)
concurent_reads: 32
// after
concurrent_reads: 32
Defensive patterns

Strategy: validation

Validate before calling

// schema-check keys against Config fields before load
var configFields = java.util.Arrays.stream(org.apache.cassandra.config.Config.class.getDeclaredFields())
    .map(java.lang.reflect.Field::getName).collect(java.util.stream.Collectors.toSet());
new org.yaml.snakeyaml.Yaml().load(yamlString) instanceof Map<?,?> m &&
    m.keySet().stream().map(Object::toString)
     .filter(k -> !configFields.contains(k))
     .forEach(k -> System.err.println("Unknown config key: " + k));

Try / catch

try {
    config = loader.loadConfig(url);
} catch (ConfigurationException e) {
    if (e.getMessage().contains("are not valid"))
        log.error("Unknown yaml keys found; fix names: " + e.getMessage());
    throw e;
}

Prevention

When it happens

Trigger: cassandra.yaml (or a programmatically supplied config map) contains a top-level or nested key that does not correspond to any field in Config/its nested types, so the checker's traversal yields a MissingProperty/null result for that path.

Common situations: Typos in config keys (e.g. 'concurrent_reads' misspelled); keys removed in a newer Cassandra major version still present in an old yaml; inventing plausible-looking keys that never existed.

Related errors


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

Appendix: source

Thrown at src/java/org/apache/cassandra/config/YamlConfigurationLoader.java:557

            Property root = null;
            for (String s : name.split("\\."))
            {
                Property prop = getFlatProperty(type, s);
                if (prop instanceof MissingProperty)
                {
                    root = null;
                    break;
                }
                root = root == null ? prop : Properties.andThen(root, prop);
                type = root.getType();
            }
            return root != null ? root : new MissingProperty(name);
        }

        public void check() throws ConfigurationException
        {
            if (!nullProperties.isEmpty())
                throw new ConfigurationException("Invalid yaml. Those properties " + nullProperties + " are not valid", false);

            if (!missingProperties.isEmpty())
                throw new ConfigurationException("Invalid yaml. Please remove properties " + missingProperties + " from your cassandra.yaml", false);

            if (!deprecationWarnings.isEmpty())
                logger.warn("{} parameters have been deprecated. They have new names and/or value format; For more information, please refer to NEWS.txt", deprecationWarnings);
        }
    }

    public static LoaderOptions getDefaultLoaderOptions()
    {
        LoaderOptions loaderOptions = new LoaderOptions();
        loaderOptions.setCodePointLimit(64 * 1024 * 1024); // 64 MiB
        loaderOptions.setWarnOnDuplicateKeys(false);
        return loaderOptions;
    }
}

View on GitHub (pinned to 88fd0f6a0e)