apache/cassandra · error · ConfigurationException

Memtable configuration "${configurationKey}" not found.

Error message

Memtable configuration "${configurationKey}" not found.

What it means

Thrown from MemtableParams.parseConfiguration when a table (or configuration reference) specifies a memtable configuration key that has no matching entry in the configured memtable_configurations map (and is not the built-in 'default'). Cassandra rejects it with a ConfigurationException because it cannot instantiate the memtable factory for an undefined configuration.

Source

Thrown at src/java/org/apache/cassandra/schema/MemtableParams.java:212

                    forRemoval.add(inheritingEntry.getKey());
                }
            }

            assert !forRemoval.isEmpty();

            for (String toRemove : forRemoval)
                inheritingClasses.remove(toRemove);
        }

        return ImmutableMap.copyOf(configs);
    }

    private static MemtableParams parseConfiguration(String configurationKey)
    {
        ParameterizedClass definition = CONFIGURATION_DEFINITIONS.get(configurationKey);

        if (definition == null)
            throw new ConfigurationException("Memtable configuration \"" + configurationKey + "\" not found.");
        return new MemtableParams(getMemtableFactory(definition), configurationKey);
    }


    private static Memtable.Factory getMemtableFactory(ParameterizedClass options)
    {
        // Special-case this so that we don't initialize memtable class for tests that need to delay that.
        if (options == DEFAULT_CONFIGURATION)
            return DEFAULT_MEMTABLE_FACTORY;

        String className = options.class_name;
        if (className == null || className.isEmpty())
            throw new ConfigurationException("The 'class_name' option must be specified.");

        className = className.contains(".") ? className : "org.apache.cassandra.db.memtable." + className;
        try
        {
            Memtable.Factory factory;

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Add the missing named entry to memtable_configurations in cassandra.yaml on all nodes and restart.
  2. Alter the table to use an existing configuration key (or 'default').
  3. Check exact spelling/case of the key against the memtable_configurations map in the YAML.

Example fix

# before (cassandra.yaml) — table references key 'tiny' which is undefined
memtable_configurations:
  small: {class_name: DefaultMemtable}
# after
memtable_configurations:
  small: {class_name: DefaultMemtable}
  tiny: {inherits: default, class_name: DefaultMemtable}
Defensive patterns

Strategy: validation

Validate before calling

-- verify every table's memtable config key exists in the YAML before startup
SELECT keyspace_name, table_name FROM system_schema.tables; -- confirm each referenced key is in cassandra.yaml memtable_configurations or equals 'default'

Try / catch

try { defineTable(memtableKey); } catch (ConfigurationException e) { if (e.getMessage().contains("not found")) fallBackToDefaultKey(); else throw e; }

Prevention

When it happens

Trigger: A table's schema references a memtable configuration key (table params set via CREATE/ALTER TABLE or the StorageService/system API), but cassandra.yaml's memtable_configurations contains no entry with that name; also triggered at startup when a configured table points at a removed entry.

Common situations: Node deployed with an outdated cassandra.yaml lacking an entry referenced by a table created on another cluster, YAML entry renamed/deleted while tables still reference it, key name typo when applying table options.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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