apache/cassandra · error · IllegalArgumentException
Invalid specifiers in
Error message
Invalid specifiers in ${describe}; expect [GlobalGroup];[ExclusiveGroup] but got: ${input} What it means
AccordExecutor.parseEnumParams parses JVM-test/diagnostic flags of the form 'GlobalGroup-spec;ExclusiveGroup-spec' separated by exactly one semicolon. When the input does not contain exactly two semicolon-separated specifiers, it throws IllegalArgumentException describing the expected format. It is a strict input-format guard for internal tuning parameters like queue_active_limits.
Solutions
- Provide exactly two semicolon-separated parts: '<GlobalGroup-spec>;<ExclusiveGroup-spec>'.
- Quote the value in your shell so semicolons are not interpreted: -Dcassandra.acord.queue_active_limits='load:8;local:4'.
- Check each part parses as valid enum values (see error 1974 for per-part errors).
Example fix
// before -Dcassandra.acord.queue_active_limits=load:8 // after -Dcassandra.acord.queue_active_limits=load:8;load:4
Defensive patterns
Strategy: validation
Validate before calling
String v = System.getProperty("cassandra.acord.queue_active_limits");
if (v != null && v.split(";").length != 2) throw new IllegalArgumentException("expect <GlobalGroup>;<ExclusiveGroup>, got: " + v); Try / catch
try { parseFlags(v); } catch (IllegalArgumentException e) { LOG.error("Bad queue_active_limits '{}': {}", v, e.getMessage()); throw e; } Prevention
- Always quote semicolon-containing -D values in shell.
- Keep a canonical example of the flag in runbooks.
- Validate tuning flags in CI before deploying.
When it happens
Trigger: Passing a system property/argument such as -Dcassandra.acord.queue_active_limits with zero or more than one semicolons, e.g. 'flush:8' or 'a:1;b:2;c:3', to AccordExecutor configuration parsing.
Common situations: Typos when copying tuning flags; shell quoting stripping the semicolon (semicolons often need quoting in bash); adding an extra group specifier by mistake.
Understand the failure class
Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.
Related errors
- Invalid specifier in
- Invalid limit in queue_active_limits
- Invalid queue identifier
- entries must not be empty
- A CQL blob string must have an even length (since one byte…
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/6a0982ddcf56bb66.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/service/accord/execution/AccordExecutor.java:813
{
for (int j = 0 ; j < q0.size() ; ++j)
snapshot.add(new TaskInfo(ifQueued, q.commandStoreId, q0.getSingle(j)));
}
}
}
else
{
int commmandStoreId = t instanceof SafeTask ? ((SafeTask<?>) t).commandStore.id() : -1;
snapshot.add(new TaskInfo(ifCurrent, commmandStoreId, t));
}
}
}
private static long[] parseEnumParams(String input, String describe)
{
String[] specs = input.split(";");
if (specs.length != 2)
throw new IllegalArgumentException("Invalid specifiers in " + describe + "; expect [GlobalGroup];[ExclusiveGroup] but got: " + input);
long[] result = new long[2];
result[0] = parseEnumParams(GlobalGroup::valueOf, specs[0], describe + " for GlobalGroup");
result[1] = parseEnumParams(ExclusiveGroup::valueOf, specs[1], describe + " for ExclusiveGroup");
return result;
}
private static long parseEnumParams(Function<String, ? extends Enum<?>> get, String input, String describe)
{
long result = 0;
for (String spec : input.split(","))
{
if (spec.trim().isEmpty()) continue;
String[] split = spec.split(":");
if (split.length != 2)
throw new IllegalArgumentException("Invalid specifier " + spec + " in " + describe + ": " + input);
tryView on GitHub (pinned to 88fd0f6a0e)