apache/cassandra · error · RuntimeException
java.lang.Throwable
Error message
java.lang.Throwable
What it means
The CompressionDictionaryCommandGroup's list operation calls probe.listCompressionDictionaries(keyspace, table) inside a supplier; any Throwable from the JMX lookup is wrapped in a RuntimeException. It means the node failed to enumerate compression dictionaries for the given table.
Source
Thrown at src/java/org/apache/cassandra/tools/nodetool/CompressionDictionaryCommandGroup.java:231
@Parameters(index = "0", description = "The keyspace name", arity = "1")
private String keyspace;
@Parameters(index = "1", description = "The table name", arity = "1")
private String table;
@Override
protected void execute(NodeProbe probe)
{
ListingHelper.list(probe,
() ->
{
try
{
return probe.listCompressionDictionaries(keyspace, table);
}
catch (Throwable t)
{
throw new RuntimeException(t);
}
},
List.of(CompressionDictionaryDetailsTabularData.TABULAR_DATA_TYPE_TABLE_ID_INDEX,
CompressionDictionaryDetailsTabularData.TABULAR_DATA_TYPE_RAW_DICTIONARY_INDEX));
}
}
@Command(name = "cleanup", description = "Clean up orphaned dictionaries by deleting them from " + SystemDistributedKeyspace.NAME
+ '.' + SystemDistributedKeyspace.COMPRESSION_DICTIONARIES +
" table, these are ones for which a table they were trained for was dropped.")
public static class CleanupDictionaries extends AbstractCommand
{
@Option(names = {"-d", "--dry"}, description = "Only display orphaned dictionaries, do not remove them.")
private boolean dry;
@Override
protected void execute(NodeProbe probe)
{View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Verify the keyspace/table names are correct and exist on the connected node.
- Confirm the Cassandra version on the target node supports compression dictionaries (matching your client).
- Check the wrapped cause (printed as 'Caused by') for the real failure.
- Use a node that hosts replicas of the table.
Example fix
// before nodetool compressiondictionaries list ks tbl # old node without dictionary support // after nodetool netstats -H | head # or check version first: nodetool version # ensure >= version supporting compression dictionaries
Defensive patterns
Strategy: try-catch
Validate before calling
// confirm version support and table existence before listing dictionaries
String version = probe.getReleaseVersion();
if (!supportsCompressionDictionaryJmx(version))
throw new UnsupportedOperationException("Target node " + version + " lacks dictionary JMX API"); Try / catch
try { List<?> dicts = probe.listCompressionDictionaries(ks, table); }
catch (RuntimeException e) {
Throwable t = e.getCause();
log("Dictionary listing failed: " + t); // inspect real cause: instance-not-found, version, IO
} Prevention
- Run nodetool from the same (or newer) version as the target nodes.
- Verify keyspace/table names before invoking.
- Check the wrapped cause — it distinguishes missing table from unsupported JMX API.
- On mixed-version clusters, target a node known to host the table.
When it happens
Trigger: `nodetool compressiondictionaries list <keyspace> <table>` when the table doesn't exist on the node, the node runs a version without the dictionary JMX API, or the remote call throws (IO/instance-not-found).
Common situations: Querying a table with no compression dictionaries (or no zstd dictionary support); mixed-version cluster where some nodes lack the new MBean method; typo in keyspace/table.
Understand the failure class
Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.
Related errors
- <ConfigurationException message>
- Dictionary to import has older dictionary id (%s) than the l
- Error while refreshing system.size_estimates
- Unknown Cache metric name
- Unknown BufferPool metric name
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/217fa6ba4e81f614.
Report an issue: GitHub.