apache/cassandra · error · IllegalArgumentException
%s property contains an item which is not in format 'keyspac
Error message
%s property contains an item which is not in format 'keyspace' or 'keyspace.table' but it is '%s'
What it means
While parsing the cassandra.commitlog_replay_list in CommitLogReplayer.create, each entry is split on '.'. An entry producing more than two parts is neither a bare keyspace nor a keyspace.table pair, so IllegalArgumentException '%s property contains an item which is not in format keyspace or keyspace.table but it is %s' is thrown, naming the property key and the offending item.
Source
Thrown at src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java:411
* */
public static ReplayFilter create()
{
String replayList = COMMIT_LOG_REPLAY_LIST.getString();
if (replayList == null)
return new AlwaysReplayFilter();
Multimap<String, String> toReplay = HashMultimap.create();
for (String rawPair : replayList.split(","))
{
String trimmedRawPair = rawPair.trim();
if (trimmedRawPair.isEmpty() || trimmedRawPair.endsWith("."))
throw new IllegalArgumentException(format("Invalid pair: '%s'", trimmedRawPair));
String[] pair = StringUtils.split(trimmedRawPair, '.');
if (pair.length > 2)
throw new IllegalArgumentException(format("%s property contains an item which " +
"is not in format 'keyspace' or 'keyspace.table' " +
"but it is '%s'",
COMMIT_LOG_REPLAY_LIST.getKey(),
String.join(".", pair)));
String keyspaceName = pair[0];
Keyspace ks = Schema.instance.getKeyspaceInstance(keyspaceName);
if (ks == null)
throw new IllegalArgumentException("Unknown keyspace " + keyspaceName);
if (pair.length == 1)
{
for (ColumnFamilyStore cfs : ks.getColumnFamilyStores())
toReplay.put(keyspaceName, cfs.name);
}
else
{View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Correct the entry to 'keyspace' or 'keyspace.table' — remove any extra dot-separated components.
- If the table name itself contains a dot, quote/rename it at the schema level or filter by keyspace instead.
- Regenerate the replay list from schema metadata (system_schema.tables) to avoid typos.
- Validate each item with a regex '^[^.]+(\.[^.]+)?$' before setting the system property.
Example fix
// before -Dcassandra.commitlog_replay_list=ks1.tbl1.extra // IllegalArgumentException // after -Dcassandra.commitlog_replay_list=ks1.tbl1
Defensive patterns
Strategy: validation
Validate before calling
for (String item : replayList.split(",")) {
String t = item.trim();
if (t.chars().filter(c -> c == '.').count() > 1)
throw new IllegalArgumentException("Replay list item must be keyspace or keyspace.table: " + t);
} Try / catch
try { CommitLogReplayer.create(...); } catch (IllegalArgumentException e) { logger.error("Bad replay item: {}", e.getMessage()); } Prevention
- Restrict entries to 'keyspace' or 'keyspace.table' shapes
- Strip any tooling suffixes before setting the property
- Validate with regex '^[^.]+(\.[^.]+)?$' before restart
When it happens
Trigger: cassandra.commitlog_replay_list containing an item with more than one dot, e.g. 'ks1.tbl1.extra' or a fully-qualified identifier mistakenly pasted into the list.
Common situations: Operators pasting fully-qualified names (e.g. 'myks.mytable@dc1' or 'ks.tbl.1234'), or tools appending suffixes to table names when generating the property.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Invalid pair: '%s'
- Unable to parse snapshot commit log position
- Commit log position must be given as <segment>,<position>
- Invalid value for system property: expected integer value bu
- Invalid value for system property: expected long value but g
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/f2ac92e4f0551055.
Report an issue: GitHub.