apache/druid · error · IllegalArgumentException

Unknown version[ ]

Error message

Unknown version[%s]

What it means

CompressedVSizeColumnarMultiIntsSupplier.fromByteBuffer reads a version byte from the serialized multi-int column and throws IllegalArgumentException when the version is unknown. This means the payload is not a recognized CompressedVSizeColumnarMultiIntsSupplier format for this Druid version.

Solutions

  1. Use a Druid reader version compatible with the segment format version.
  2. Rebuild the segment from source data (re-index) with the current format.
  3. Confirm the ByteBuffer is positioned exactly at the supplier payload start.
  4. Verify file integrity by re-fetching from deep storage.

Example fix

// before: historicals on old version serving segments from upgraded ingestion
// after: upgrade historicals (or mark new segments served only by upgraded nodes)
Defensive patterns

Strategy: validation

Validate before calling

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

Try / catch

try {
  return CompressedVSizeColumnarMultiIntsSupplier.fromByteBuffer(buf, order, mapper);
} catch (IllegalArgumentException e) {
  throw new SegmentSerializationException("Unknown multi-int column format", e);
}

Prevention

When it happens

Trigger: Calling fromByteBuffer on a buffer with an unsupported version byte: newer-format segments read by an older binary, corrupted/truncated files, or misaligned buffer offsets so a random byte is read as the version.

Common situations: Cluster version skew during upgrades; manual segment inspection/copy tools; deep-storage corruption for multi-value dimension columns.

Related errors


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

Appendix: source

Thrown at processing/src/main/java/org/apache/druid/segment/data/CompressedVSizeColumnarMultiIntsSupplier.java:103

      SegmentFileMapper fileMapper
  )
  {
    byte versionFromBuffer = buffer.get();

    if (versionFromBuffer == VERSION) {
      CompressedVSizeColumnarIntsSupplier offsetSupplier = CompressedVSizeColumnarIntsSupplier.fromByteBuffer(
          buffer,
          order,
          fileMapper
      );
      CompressedVSizeColumnarIntsSupplier valueSupplier = CompressedVSizeColumnarIntsSupplier.fromByteBuffer(
          buffer,
          order,
          fileMapper
      );
      return new CompressedVSizeColumnarMultiIntsSupplier(offsetSupplier, valueSupplier);
    }
    throw new IAE("Unknown version[%s]", versionFromBuffer);
  }

  @VisibleForTesting
  public static CompressedVSizeColumnarMultiIntsSupplier fromIterable(
      final Iterable<IndexedInts> objectsIterable,
      final int maxValue,
      final ByteOrder byteOrder,
      final CompressionStrategy compression,
      final Closer closer
  )
  {
    Iterator<IndexedInts> objects = objectsIterable.iterator();
    IntList offsetList = new IntArrayList();
    IntList values = new IntArrayList();

    int offset = 0;
    while (objects.hasNext()) {
      IndexedInts next = objects.next();

View on GitHub (pinned to 9b90983fd2)