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
- Remove or correct the listed properties in cassandra.yaml — the message names exactly which keys are invalid
- Check the Config class / cassandra documentation for the correct key spelling
- If a key was removed during an upgrade, delete it or replace it with its documented replacement
- 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
- Copy new keys only from the shipped conf/cassandra.yaml for your version
- Check spelling against the Config class or docs before adding keys
- Run config validation in CI with the same Cassandra version as prod
- Remove invented/typo keys immediately when flagged
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
- Cannot mix auto and manual DC weights
- Cannot set concurrent_validations greater than…
- Cannot set repair_session_max_tree_depth to which is < 10…
- Cannot set source data center to be local data center, when…
- Commit log flush interval must be positive: %fms
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)