apache/cassandra · error · IORuntimeException

Log entry of unsupported type

Error message

Log entry of unsupported type ${type}

What it means

In Dump.dump, after the type string is validated, it is dispatched in a switch to dumpSingleQuery or dumpBatch. The default branch throws this IORuntimeException — a defensive backstop for any type that slipped past earlier checks or was introduced later. It should be unreachable for well-formed current-version logs.

Solutions

  1. Ensure the Dump tool and the log-writing Cassandra come from matching versions
  2. Re-capture the log with the current version
  3. If developing, keep validation and switch cases in sync with FullQueryLogger constants
Defensive patterns

Strategy: try-catch

Try / catch

try { dump(file); } catch (IORuntimeException e) { if (e.getMessage().startsWith("Log entry of unsupported type")) { exitWith("tool/log version mismatch; upgrade fqltool"); } else throw e; }

Prevention

When it happens

Trigger: The switch encounters a type string matching neither SINGLE_QUERY nor BATCH — only possible if the type constant values changed between versions or the earlier validation was bypassed.

Common situations: Constant-value drift between Cassandra versions; logs from a newer release with an added record type.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at tools/fqltool/src/org/apache/cassandra/fqltool/commands/Dump.java:135

              .append(System.lineSeparator());

            long generatedNowInSeconds = wireIn.read(FullQueryLogger.GENERATED_NOW_IN_SECONDS).int64();
            sb.append("Generated nowInSeconds:")
              .append(generatedNowInSeconds)
              .append(System.lineSeparator());

            switch (type)
            {
                case (FullQueryLogger.SINGLE_QUERY):
                    dumpQuery(options, wireIn, sb);
                    break;

                case (FullQueryLogger.BATCH):
                    dumpBatch(wireIn, sb);
                    break;

                default:
                    throw new IORuntimeException("Log entry of unsupported type " + type);
            }

            System.out.print(sb.toString());
            System.out.flush();
        };

        //Backoff strategy for spinning on the queue, not aggressive at all as this doesn't need to be low latency
        Pauser pauser = Pauser.millis(100);
        List<ChronicleQueue> queues = arguments.stream().distinct().map(path -> SingleChronicleQueueBuilder.single(new File(path)).readOnly(true).rollCycle(RollCycles.valueOf(rollCycle)).build()).collect(Collectors.toList());
        List<ExcerptTailer> tailers = queues.stream().map(ChronicleQueue::createTailer).collect(Collectors.toList());
        boolean hadWork = true;
        while (hadWork)
        {
            hadWork = false;
            for (ExcerptTailer tailer : tailers)
            {
                while (tailer.readDocument(reader))
                {

View on GitHub (pinned to 88fd0f6a0e)