apache/cassandra · error · ConfigurationException
Memtable class ${className} does not accept any futher param
Error message
Memtable class ${className} does not accept any futher parameters, but ${parametersCopy} were given. What it means
Thrown from MemtableParams.getMemtableFactory after reflective loading of a custom memtable class: the resolved Memtable.Factory does not accept further parameters, but the configuration entry still has leftover option keys after consuming recognized ones. Cassandra treats unconsumed parameters as invalid configuration and throws a ConfigurationException (the message contains a pre-existing typo 'futher').
Source
Thrown at src/java/org/apache/cassandra/schema/MemtableParams.java:253
try
{
Method factoryMethod = clazz.getDeclaredMethod("factory", Map.class);
if (!Memtable.Factory.class.isAssignableFrom(factoryMethod.getReturnType()))
throw new ClassCastException("Memtable factory method on " + className +
" must return " + Memtable.Factory.class.getName());
factory = (Memtable.Factory) factoryMethod.invoke(null, parametersCopy);
}
catch (NoSuchMethodException e)
{
// continue with FACTORY field
Field factoryField = clazz.getDeclaredField("FACTORY");
if (!Memtable.Factory.class.isAssignableFrom(factoryField.getType()))
throw new ClassCastException("Memtable FACTORY field on " + className +
" must be of type " + Memtable.Factory.class.getName());
factory = (Memtable.Factory) factoryField.get(null);
}
if (!parametersCopy.isEmpty())
throw new ConfigurationException("Memtable class " + className + " does not accept any futher parameters, but " +
parametersCopy + " were given.");
return factory;
}
catch (NoSuchFieldException | ClassNotFoundException | IllegalAccessException | InvocationTargetException | ClassCastException e)
{
if (e.getCause() instanceof ConfigurationException)
throw (ConfigurationException) e.getCause();
throw new ConfigurationException("Could not create memtable factory for class " + options, e);
}
}
}
View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Remove unsupported parameters from the entry in cassandra.yaml, leaving only class_name (plus params the memtable actually supports).
- Switch class_name to a memtable implementation that supports the parameters you need.
- Fix parameter key spelling so the factory recognizes and consumes them.
- Check the memtable class's accepted parameter list in its documentation/source.
Example fix
# before (cassandra.yaml)
memtable_configurations:
plain:
class_name: SkipListMemtable
shards: 4
# after
memtable_configurations:
plain:
class_name: SkipListMemtable Defensive patterns
Strategy: validation
Validate before calling
// pre-check: only pass parameters documented by the target memtable class
Map<String,String> params = new HashMap<>(options); params.remove("class_name");
if (!targetMemtableAcceptsParams(className) && !params.isEmpty()) throw new IllegalStateException(className + " accepts no parameters; remove " + params.keySet()); Try / catch
try { parseMemtableConfig(entry); } catch (ConfigurationException e) { if (e.getMessage().contains("does not accept any")) stripUnknownParamsAndRetry(); else throw e; } Prevention
- Only supply parameters explicitly supported by the memtable class's factory.
- Read the target memtable class's source/docs for its accepted parameter names before configuring.
- Do not copy OPTIONS blocks between different memtable implementations.
- Watch for typos: an unconsumed key surfaces as this error, not as 'unknown option'.
When it happens
Trigger: memtable_configurations entry with class_name pointing at a memtable whose FACTORY field rejects parameters (e.g. SkipListMemtable which takes none) while the entry supplies options like {'class_name':'SkipListMemtable','some_param':'1'}; after factory extraction, parametersCopy is non-empty.
Common situations: Passing options like 'shards' to a memtable class that doesn't support them, copy-pasting options between SkipListMemtable and configurable memtable implementations, misspelling a supported parameter name so it isn't consumed.
Related errors
- Properties specified %s are not understood by %s
- %s.validateOptions() threw an error: %s %s
- Configuration entry %s can not inherit itself.
- Configuration entry %s inherits non-existing entry %s.
- Memtable configuration "${configurationKey}" not found.
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/01ed9eef0bafb043.
Report an issue: GitHub.