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

Unsupported record type field

Error message

Unsupported record type field [%s] - supported type is [%s]

What it means

Thrown by AuditLogViewer when a binary audit log record's type field is not the expected BinAuditLogger.AUDITLOG_TYPE. The file contains records the viewer does not recognize as audit entries; unless ignoreUnsupported is set, it throws instead of skipping the record.

Solutions

  1. Point the viewer at the correct binary audit log directory (audit bin log files, not other chronicle data)
  2. Enable ignore-unsupported to skip non-audit records
  3. Use matching Cassandra versions for writer and viewer

Example fix

// before
viewer.read(wrongQueueFile, false); // records of type 'other'
// after
viewer.read(auditBinLogFile, true); // correct file, skip unsupported types
Defensive patterns

Strategy: fallback

Validate before calling

// verify the file is a bin audit log before viewing
String type = peekRecordType(file);
if (!BinAuditLogger.AUDITLOG_TYPE.equals(type)) { /* wrong file */ }

Try / catch

try { viewer.read(file, ignoreUnsupported); } catch (IORuntimeException e) { if (e.getMessage().startsWith("Unsupported record type")) { /* point at the correct audit log dir or skip */ } else throw e; }

Prevention

When it happens

Trigger: readMarshallable() calls isSupportedType(type) with a type string other than "auditlog" — e.g. corrupted records, a differently formatted chronicle file, or a writer emitting new record types.

Common situations: Pointing AuditLogViewer at a non-audit chronicle queue file; reading partially corrupted/truncated audit logs; logs written by a newer version with extra record types.

Related errors


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

Appendix: source

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

            }

            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 + ']');
        }
    }

    private static class AuditLogViewerOptions
    {
        private final List<String> pathList;
        private String rollCycle = "FAST_HOURLY";
        private boolean follow;
        private boolean ignoreUnsupported;

        private AuditLogViewerOptions(String[] pathList)
        {
            this.pathList = Arrays.asList(pathList);
        }

        static AuditLogViewerOptions parseArgs(String cmdArgs[])
        {

View on GitHub (pinned to 88fd0f6a0e)