{"record":{"id":"6451f50efff152f6","repo":"apache/druid","slug":"unknown-version-6451f5","errorCode":null,"errorMessage":"Unknown version ","messagePattern":"Unknown version ","errorType":"exception","errorClass":"org.apache.druid.java.util.common.RE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/nested/ScalarStringColumnAndIndexSupplier.java","lineNumber":112,"sourceCode":"            ColumnSerializerUtils.BITMAP_INDEX_FILE_NAME\n        );\n        GenericIndexed<ImmutableBitmap> valueIndexes = GenericIndexed.read(\n            valueIndexBuffer,\n            bitmapSerdeFactory.getObjectStrategy(),\n            columnBuilder.getFileMapper()\n        );\n        return new ScalarStringColumnAndIndexSupplier(\n            dictionarySupplier,\n            ints,\n            valueIndexes,\n            bitmapSerdeFactory\n        );\n      }\n      catch (IOException ex) {\n        throw new RE(ex, \"Failed to deserialize V%s column.\", version);\n      }\n    } else {\n      throw new RE(\"Unknown version \" + version);\n    }\n  }\n\n\n  private final Supplier<? extends Indexed<ByteBuffer>> dictionarySupplier;\n  private final Supplier<ColumnarInts> encodedColumnSupplier;\n  private final GenericIndexed<ImmutableBitmap> valueIndexes;\n  private final ColumnIndexSupplier stringIndexSupplier;\n  private final BitmapSerdeFactory serdeFactory;\n\n  private ScalarStringColumnAndIndexSupplier(\n      Supplier<? extends Indexed<ByteBuffer>> dictionarySupplier,\n      Supplier<ColumnarInts> encodedColumnSupplier,\n      GenericIndexed<ImmutableBitmap> valueIndexes,\n      BitmapSerdeFactory serdeFactory\n  )\n  {\n    this.dictionarySupplier = dictionarySupplier;","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/nested/ScalarStringColumnAndIndexSupplier.java#L94-L130","documentation":"ScalarStringColumnAndIndexSupplier.read() supports only the nested string-column versions it implements (V1). A version byte in the segment that matches none of them triggers this generic String throw, since the reader cannot interpret the unknown on-disk layout.","triggerScenarios":"Reading a segment whose nested string column version byte is newer than the running Druid supports, or a corrupted file whose version byte is invalid (e.g. wrong file boundary/truncation landing on the wrong offset).","commonSituations":"Version skew in rolling upgrades (segments written by newer historicals, read by older ones); downgrades that leave behind segments in a newer format; corrupt segment files served from cache.","solutions":["Upgrade the reading Druid processes to a version that supports the segment's column format","Rebuild the segment by re-ingesting or re-compacting the affected data with the current Druid version","Replace the segment with an intact replica if the version byte appears corrupted","Keep writer and reader druid-processing versions consistent across the cluster"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Gate segment loading on writer-version compatibility metadata\nif (compareVersions(segmentMetadata.getVersion(), maxSupportedReaderVersion) > 0) {\n  throw new IllegalStateException(\"Refusing to load segment \" + segmentId\n      + \": writer version \" + segmentMetadata.getVersion() + \" unsupported by reader\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  // load segment / nested string column\n} catch (RuntimeException e) {\n  if (e.getMessage() != null && e.getMessage().startsWith(\"Unknown version\")) {\n    LOG.warn(e, \"Unknown column version in %s; scheduling re-ingest\", segmentId);\n    coordinatorClient.requestReingest(segmentId);\n  } else {\n    throw e;\n  }\n}","preventionTips":["Run rolling upgrades reader-first: upgrade historicals/brokers before middle managers","Never run a downgraded reader against segments written after the upgrade without re-ingesting","Add automated checks comparing segment writer versions with cluster reader versions at load time","Alert on version-mismatch log lines to catch skew before it reaches user queries"],"tags":["segment-deserialization","version-compatibility","druid-processing"],"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"}