{"record":{"id":"b48c30c6f0f867c5","repo":"apache/druid","slug":"unknown-version-s-b48c30","errorCode":null,"errorMessage":"Unknown version[%s]","messagePattern":"Unknown version\\[(.+?)\\]","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/data/TableLongEncodingReader.java","lineNumber":50,"sourceCode":"\n  public TableLongEncodingReader(ByteBuffer fromBuffer)\n  {\n    this.buffer = fromBuffer.asReadOnlyBuffer();\n    byte version = buffer.get();\n    if (version == CompressionFactory.TABLE_ENCODING_VERSION) {\n      int tableSize = buffer.getInt();\n      if (tableSize < 0 || tableSize > CompressionFactory.MAX_TABLE_SIZE) {\n        throw new IAE(\"Invalid table size[%s]\", tableSize);\n      }\n      bitsPerValue = VSizeLongSerde.getBitsForMax(tableSize);\n      table = new long[tableSize];\n      for (int i = 0; i < tableSize; i++) {\n        table[i] = buffer.getLong();\n      }\n      fromBuffer.position(buffer.position());\n      deserializer = VSizeLongSerde.getDeserializer(bitsPerValue, buffer, buffer.position());\n    } else {\n      throw new IAE(\"Unknown version[%s]\", version);\n    }\n  }\n\n  private TableLongEncodingReader(ByteBuffer buffer, long[] table, int bitsPerValue)\n  {\n    this.buffer = buffer;\n    this.table = table;\n    this.bitsPerValue = bitsPerValue;\n    deserializer = VSizeLongSerde.getDeserializer(bitsPerValue, buffer, buffer.position());\n  }\n\n  @Override\n  public void setBuffer(ByteBuffer buffer)\n  {\n    deserializer = VSizeLongSerde.getDeserializer(bitsPerValue, buffer, buffer.position());\n  }\n\n  @Override","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/data/TableLongEncodingReader.java#L32-L68","documentation":"TableLongEncodingReader reads a version byte from the serialized column header and only understands CompressionFactory.TABLE_ENCODING_VERSION. Any other byte (including newer formats from future Druid versions) is rejected with this IAE, guarding against misinterpreting unknown binary formats.","triggerScenarios":"Deserializing a table-encoded long column written with an unknown/unsupported version byte — e.g. data produced by a newer Druid, or a buffer read from the wrong offset so a random byte is interpreted as the version.","commonSituations":"Rolling upgrades where a newer cluster wrote segments an older node cannot read; misaligned buffer positions when parsing custom column data; corrupted segment files.","solutions":["Upgrade all Druid nodes to a version that supports the segment format in use","Re-ingest or re-write the segment with a compatible Druid version","Fix buffer parsing so the version byte is read from the correct position","Check for segment corruption and reload the segment from deep storage"],"exampleFix":"// before\n// old Druid node reading segments written by a newer version\nTableLongEncodingReader reader = new TableLongEncodingReader(byteBuffer); // Unknown version[2]\n// after\n// upgrade the reader's Druid version, or re-ingest the segment with the older format\nmvn -pl processing ... && upgrade historical nodes before serving new segments","handlingStrategy":"try-catch","validationCode":"byte v = buf.duplicate().get(pos); if (v != CompressionFactory.TABLE_ENCODING_VERSION) { upgradeRequired = true; }","typeGuard":null,"tryCatchPattern":"try { reader = new TableLongEncodingReader(buf); } catch (IAE e) { throw new SegmentLoadingException(\"unsupported column version; upgrade Druid nodes\", e); }","preventionTips":["Upgrade the whole cluster before writing segments with new formats","Never re-run ingestion on a cluster older than the segment format","Validate buffer positions before reading version bytes"],"tags":["druid","segment","compatibility"],"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-14T11:17:12.474Z"}