{"record":{"id":"2d1147de529b9305","repo":"apache/druid","slug":"unknown-version-s-2d1147","errorCode":null,"errorMessage":"Unknown version[%s]","messagePattern":"Unknown version\\[(.+?)\\]","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/data/CompressedVSizeColumnarMultiIntsSupplier.java","lineNumber":103,"sourceCode":"      SegmentFileMapper fileMapper\n  )\n  {\n    byte versionFromBuffer = buffer.get();\n\n    if (versionFromBuffer == VERSION) {\n      CompressedVSizeColumnarIntsSupplier offsetSupplier = CompressedVSizeColumnarIntsSupplier.fromByteBuffer(\n          buffer,\n          order,\n          fileMapper\n      );\n      CompressedVSizeColumnarIntsSupplier valueSupplier = CompressedVSizeColumnarIntsSupplier.fromByteBuffer(\n          buffer,\n          order,\n          fileMapper\n      );\n      return new CompressedVSizeColumnarMultiIntsSupplier(offsetSupplier, valueSupplier);\n    }\n    throw new IAE(\"Unknown version[%s]\", versionFromBuffer);\n  }\n\n  @VisibleForTesting\n  public static CompressedVSizeColumnarMultiIntsSupplier fromIterable(\n      final Iterable<IndexedInts> objectsIterable,\n      final int maxValue,\n      final ByteOrder byteOrder,\n      final CompressionStrategy compression,\n      final Closer closer\n  )\n  {\n    Iterator<IndexedInts> objects = objectsIterable.iterator();\n    IntList offsetList = new IntArrayList();\n    IntList values = new IntArrayList();\n\n    int offset = 0;\n    while (objects.hasNext()) {\n      IndexedInts next = objects.next();","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/data/CompressedVSizeColumnarMultiIntsSupplier.java#L85-L121","documentation":"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.","triggerScenarios":"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.","commonSituations":"Cluster version skew during upgrades; manual segment inspection/copy tools; deep-storage corruption for multi-value dimension columns.","solutions":["Use a Druid reader version compatible with the segment format version.","Rebuild the segment from source data (re-index) with the current format.","Confirm the ByteBuffer is positioned exactly at the supplier payload start.","Verify file integrity by re-fetching from deep storage."],"exampleFix":"// before: historicals on old version serving segments from upgraded ingestion\n// after: upgrade historicals (or mark new segments served only by upgraded nodes)","handlingStrategy":"validation","validationCode":"// Java\nint version = buf.get(buf.position());\nif (!SUPPORTED_MULTI_INTS_VERSIONS.contains(version)) {\n  throw new IllegalArgumentException(\"Unsupported multi-int column version \" + version);\n}","typeGuard":null,"tryCatchPattern":"try {\n  return CompressedVSizeColumnarMultiIntsSupplier.fromByteBuffer(buf, order, mapper);\n} catch (IllegalArgumentException e) {\n  throw new SegmentSerializationException(\"Unknown multi-int column format\", e);\n}","preventionTips":["Verify segment integrity when migrating between clusters.","Do not parse segment binaries outside Druid's column-reading APIs.","Align node versions during rolling upgrades."],"tags":["segment-format","version-mismatch","deserialization"],"backgroundTag":"unsupported-enum-value","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}