{"record":{"id":"63d8b64e59ae7521","repo":"apache/cassandra","slug":"memtable-configuration-configurationkey-not-f","errorCode":null,"errorMessage":"Memtable configuration \"${configurationKey}\" not found.","messagePattern":"Memtable configuration \"(.+?)\" not found\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/schema/MemtableParams.java","lineNumber":212,"sourceCode":"                    forRemoval.add(inheritingEntry.getKey());\n                }\n            }\n\n            assert !forRemoval.isEmpty();\n\n            for (String toRemove : forRemoval)\n                inheritingClasses.remove(toRemove);\n        }\n\n        return ImmutableMap.copyOf(configs);\n    }\n\n    private static MemtableParams parseConfiguration(String configurationKey)\n    {\n        ParameterizedClass definition = CONFIGURATION_DEFINITIONS.get(configurationKey);\n\n        if (definition == null)\n            throw new ConfigurationException(\"Memtable configuration \\\"\" + configurationKey + \"\\\" not found.\");\n        return new MemtableParams(getMemtableFactory(definition), configurationKey);\n    }\n\n\n    private static Memtable.Factory getMemtableFactory(ParameterizedClass options)\n    {\n        // Special-case this so that we don't initialize memtable class for tests that need to delay that.\n        if (options == DEFAULT_CONFIGURATION)\n            return DEFAULT_MEMTABLE_FACTORY;\n\n        String className = options.class_name;\n        if (className == null || className.isEmpty())\n            throw new ConfigurationException(\"The 'class_name' option must be specified.\");\n\n        className = className.contains(\".\") ? className : \"org.apache.cassandra.db.memtable.\" + className;\n        try\n        {\n            Memtable.Factory factory;","sourceCodeStart":194,"sourceCodeEnd":230,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/schema/MemtableParams.java#L194-L230","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Add the missing named entry to memtable_configurations in cassandra.yaml on all nodes and restart.","Alter the table to use an existing configuration key (or 'default').","Check exact spelling/case of the key against the memtable_configurations map in the YAML."],"exampleFix":"# before (cassandra.yaml) — table references key 'tiny' which is undefined\nmemtable_configurations:\n  small: {class_name: DefaultMemtable}\n# after\nmemtable_configurations:\n  small: {class_name: DefaultMemtable}\n  tiny: {inherits: default, class_name: DefaultMemtable}","handlingStrategy":"validation","validationCode":"-- verify every table's memtable config key exists in the YAML before startup\nSELECT keyspace_name, table_name FROM system_schema.tables; -- confirm each referenced key is in cassandra.yaml memtable_configurations or equals 'default'","typeGuard":null,"tryCatchPattern":"try { defineTable(memtableKey); } catch (ConfigurationException e) { if (e.getMessage().contains(\"not found\")) fallBackToDefaultKey(); else throw e; }","preventionTips":["Keep memtable_configurations identical on all nodes of the cluster and in config management.","Before renaming/deleting an entry, check which tables reference it and ALTER them first.","Use 'default' as the fallback key for tables that don't need a custom memtable."],"tags":["cassandra","configuration","memtable","table-options"],"backgroundTag":"resource-not-found","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}