apache/cassandra · error · org.apache.cassandra.io.util.IORuntimeException

Unsupported record version

Error message

Unsupported record version [%s] - highest supported version is [%s]

What it means

Thrown by AuditLogViewer's chronicle reader when a binary audit log record carries a version newer than BinAuditLogger.CURRENT_VERSION (or otherwise unsupported). The viewer cannot safely deserialize records written by newer or incompatible writers; unless ignoreUnsupported is set, it fails loudly instead of skipping.

Solutions

  1. Upgrade the AuditLogViewer / Cassandra binaries so CURRENT_VERSION >= the record version
  2. Re-run the viewer with the ignore-unsupported option to skip records it cannot parse
  3. Confirm you are reading the intended audit log files, not ones from a newer installation

Example fix

// before
viewer.read(log, /* ignoreUnsupported */ false);
// after
viewer.read(log, /* ignoreUnsupported */ true); // or upgrade the viewer binary
Defensive patterns

Strategy: fallback

Validate before calling

// peek the record version before full parse
int version = readRecordVersion(file);
if (version > BinAuditLogger.CURRENT_VERSION) { /* upgrade viewer or skip */ }

Try / catch

try { viewer.read(log, ignoreUnsupported); } catch (IORuntimeException e) { if (e.getMessage().startsWith("Unsupported record version")) { /* handle with newer tooling or skip file */ } else throw e; }

Prevention

When it happens

Trigger: Running AuditLogViewer over a bin audit log whose record version field exceeds the viewer's supported BinAuditLogger.CURRENT_VERSION; reading logs produced by a newer Cassandra build.

Common situations: Inspecting audit logs generated by an upgraded cluster with an older offline tool; pointing the viewer at a different log format version.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/032b5cf9888326d3. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/tools/AuditLogViewer.java:155

              .append(wireIn.read(BinAuditLogger.AUDITLOG_MESSAGE).text())
              .append(System.lineSeparator());

            displayFun.accept(sb.toString());
        }

        private boolean isSupportedVersion(int version)
        {
            if (version <= BinAuditLogger.CURRENT_VERSION)
            {
                return true;
            }

            if (ignoreUnsupported)
            {
                return false;
            }

            throw new IORuntimeException("Unsupported record version [" + version
                                         + "] - highest supported version is [" + BinAuditLogger.CURRENT_VERSION + ']');
        }

        private boolean isSupportedType(String type)
        {
            if (BinAuditLogger.AUDITLOG_TYPE.equals(type))
            {
                return true;
            }

            if (ignoreUnsupported)
            {
                return false;
            }

            throw new IORuntimeException("Unsupported record type field [" + type
                                         + "] - supported type is [" + BinAuditLogger.AUDITLOG_TYPE + ']');
        }

View on GitHub (pinned to 88fd0f6a0e)