apache/druid · error · IllegalArgumentException

Unknown version[ ]

Error message

Unknown version[%s]

What it means

CompressedVSizeColumnarIntsSupplier.fromByteBuffer switches on the version byte read from the buffer and throws IllegalArgumentException for any unrecognized version. The buffer does not contain a supported CompressedVSizeColumnarIntsSupplier payload for this Druid build.

Solutions

  1. Run a Druid version that supports the segment's format version (match historicals to the writer version).
  2. Re-index/rebuild the segment with the current Druid version.
  3. Verify the buffer position so the first byte read is genuinely the version byte.
  4. Re-download the segment to eliminate corruption.

Example fix

// before: fromByteBuffer(buffer) with buffer mid-way through the file
// after: fromByteBuffer(columnStart.slice()) where columnStart points at the payload header
Defensive patterns

Strategy: validation

Validate before calling

// Java
int version = buf.get(buf.position());
if (!SUPPORTED_VSIZE_INTS_VERSIONS.contains(version)) {
  throw new IllegalArgumentException("Unsupported vSize column version " + version);
}

Try / catch

try {
  return CompressedVSizeColumnarIntsSupplier.fromByteBuffer(buf, order, mapper);
} catch (IllegalArgumentException e) {
  throw new SegmentSerializationException("Incompatible vSize int column", e);
}

Prevention

When it happens

Trigger: Reading a v-size compressed int column with an unsupported header version: segment written by an incompatible Druid version, corrupted or truncated file, or the ByteBuffer is not sliced at the column payload start.

Common situations: Version skew between ingestion and query nodes; reading segments copied manually from another cluster; tooling that parses segment files with wrong offsets.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/b861b6fc0fa735d0. Report an issue: GitHub.

Appendix: source

Thrown at processing/src/main/java/org/apache/druid/segment/data/CompressedVSizeColumnarIntsSupplier.java:174

    if (versionFromBuffer == VERSION) {
      final int numBytes = buffer.get();
      final int totalSize = buffer.getInt();
      final int sizePer = buffer.getInt();

      final CompressionStrategy compression = CompressionStrategy.forId(buffer.get());

      return new CompressedVSizeColumnarIntsSupplier(
          totalSize,
          sizePer,
          numBytes,
          GenericIndexed.read(buffer, DecompressingByteBufferObjectStrategy.of(order, compression), mapper),
          compression
      );

    }

    throw new IAE("Unknown version[%s]", versionFromBuffer);
  }

  @VisibleForTesting
  public static CompressedVSizeColumnarIntsSupplier fromList(
      final IntList list,
      final int maxValue,
      final int chunkFactor,
      final ByteOrder byteOrder,
      final CompressionStrategy compression,
      final Closer closer
  )
  {
    final int numBytes = VSizeColumnarInts.getNumBytesForMax(maxValue);
    final int chunkBytes = chunkFactor * numBytes;

    Preconditions.checkArgument(
        chunkFactor <= maxIntsInBufferForBytes(numBytes),
        "Chunks must be <= 64k bytes. chunkFactor was[%s]",

View on GitHub (pinned to 9b90983fd2)