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

  1. Remove unsupported parameters from the entry in cassandra.yaml, leaving only class_name (plus params the memtable actually supports).
  2. Switch class_name to a memtable implementation that supports the parameters you need.
  3. Fix parameter key spelling so the factory recognizes and consumes them.
  4. 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

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


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