{"record":{"id":"d84516501f52cd22","repo":"apache/cassandra","slug":"unsupported-record-version-version-highest-d84516","errorCode":null,"errorMessage":"Unsupported record version [${version}] - highest supported version is [${CURRENT_VERSION}]","messagePattern":"Unsupported record version \\[(.+?)\\] - highest supported version is \\[(.+?)\\]","errorType":"exception","errorClass":"IORuntimeException","httpStatus":null,"severity":"error","filePath":"tools/fqltool/src/org/apache/cassandra/fqltool/commands/Dump.java","lineNumber":85,"sourceCode":"    private boolean follow = false;\n\n    @Override\n    public void run()\n    {\n        dump(arguments, rollCycle, follow);\n    }\n\n    public static void dump(List<String> arguments, String rollCycle, boolean follow)\n    {\n        StringBuilder sb = new StringBuilder();\n        ReadMarshallable reader = wireIn ->\n        {\n            sb.setLength(0);\n\n            int version = wireIn.read(BinLog.VERSION).int16();\n            if (version > FullQueryLogger.CURRENT_VERSION)\n            {\n                throw new IORuntimeException(\"Unsupported record version [\" + version\n                                             + \"] - highest supported version is [\" + FullQueryLogger.CURRENT_VERSION + ']');\n            }\n\n            String type = wireIn.read(BinLog.TYPE).text();\n            if (!FullQueryLogger.SINGLE_QUERY.equals((type)) && !FullQueryLogger.BATCH.equals((type)))\n            {\n                throw new IORuntimeException(\"Unsupported record type field [\" + type\n                                             + \"] - supported record types are [\" + FullQueryLogger.SINGLE_QUERY + \", \" + FullQueryLogger.BATCH + ']');\n            }\n\n            sb.append(\"Type: \")\n              .append(type)\n              .append(System.lineSeparator());\n\n            long queryStartTime = wireIn.read(FullQueryLogger.QUERY_START_TIME).int64();\n            sb.append(\"Query start time: \")\n              .append(queryStartTime)\n              .append(System.lineSeparator());","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/tools/fqltool/src/org/apache/cassandra/fqltool/commands/Dump.java#L67-L103","documentation":"Dump.dump reads each record in a full-query-log wire file and first checks the VERSION field against FullQueryLogger.CURRENT_VERSION. A higher version means the file was written by a newer Cassandra than the tool, and parsing it is unsafe, so an IORuntimeException is thrown.","triggerScenarios":"Running fqltool dump on a binlog whose per-record VERSION int16 exceeds the tool's CURRENT_VERSION.","commonSituations":"Logs copied from a cluster running a newer Cassandra; downgrading the fqltool binary while keeping newer logs; mixed-version environments.","solutions":["Upgrade fqltool to a version whose CURRENT_VERSION >= the log's version","Re-capture the log with the current Cassandra version","Check the log version first to plan the upgrade path"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { dump(logFile); } catch (IORuntimeException e) { if (e.getMessage().startsWith(\"Unsupported record version\")) { exitWith(\"log written by newer Cassandra; upgrade fqltool\"); } else throw e; }","preventionTips":["Record the writing Cassandra version alongside captured logs","Upgrade fqltool before replaying logs from newer clusters","Run version-compatibility checks in CI for log tooling"],"tags":["serialization","versioning","compatibility"],"backgroundTag":"incompatible-source-type","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}