{"record":{"id":"217fa6ba4e81f614","repo":"apache/cassandra","slug":"java-lang-throwable","errorCode":null,"errorMessage":"java.lang.Throwable","messagePattern":"java\\.lang\\.Throwable","errorType":"console","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/tools/nodetool/CompressionDictionaryCommandGroup.java","lineNumber":231,"sourceCode":"        @Parameters(index = \"0\", description = \"The keyspace name\", arity = \"1\")\n        private String keyspace;\n\n        @Parameters(index = \"1\", description = \"The table name\", arity = \"1\")\n        private String table;\n\n        @Override\n        protected void execute(NodeProbe probe)\n        {\n            ListingHelper.list(probe,\n                               () ->\n                               {\n                                   try\n                                   {\n                                       return probe.listCompressionDictionaries(keyspace, table);\n                                   }\n                                   catch (Throwable t)\n                                   {\n                                       throw new RuntimeException(t);\n                                   }\n                               },\n                               List.of(CompressionDictionaryDetailsTabularData.TABULAR_DATA_TYPE_TABLE_ID_INDEX,\n                                       CompressionDictionaryDetailsTabularData.TABULAR_DATA_TYPE_RAW_DICTIONARY_INDEX));\n        }\n    }\n\n    @Command(name = \"cleanup\", description = \"Clean up orphaned dictionaries by deleting them from \" + SystemDistributedKeyspace.NAME\n                                             + '.' + SystemDistributedKeyspace.COMPRESSION_DICTIONARIES +\n                                             \" table, these are ones for which a table they were trained for was dropped.\")\n    public static class CleanupDictionaries extends AbstractCommand\n    {\n        @Option(names = {\"-d\", \"--dry\"}, description = \"Only display orphaned dictionaries, do not remove them.\")\n        private boolean dry;\n\n        @Override\n        protected void execute(NodeProbe probe)\n        {","sourceCodeStart":213,"sourceCodeEnd":249,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/tools/nodetool/CompressionDictionaryCommandGroup.java#L213-L249","documentation":"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.","triggerScenarios":"`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).","commonSituations":"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.","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."],"exampleFix":"// before\nnodetool compressiondictionaries list ks tbl  # old node without dictionary support\n// after\nnodetool netstats -H | head  # or check version first:\nnodetool version  # ensure >= version supporting compression dictionaries","handlingStrategy":"try-catch","validationCode":"// confirm version support and table existence before listing dictionaries\nString version = probe.getReleaseVersion();\nif (!supportsCompressionDictionaryJmx(version))\n    throw new UnsupportedOperationException(\"Target node \" + version + \" lacks dictionary JMX API\");","typeGuard":null,"tryCatchPattern":"try { List<?> dicts = probe.listCompressionDictionaries(ks, table); }\ncatch (RuntimeException e) {\n    Throwable t = e.getCause();\n    log(\"Dictionary listing failed: \" + t);  // inspect real cause: instance-not-found, version, IO\n}","preventionTips":["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."],"tags":["nodetool","compression","jmx","versioning"],"backgroundTag":"api-request-failed","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}