{"record":{"id":"bf2f830900082503","repo":"apache/druid","slug":"unknown-version-s-bf2f83","errorCode":null,"errorMessage":"Unknown version[%s]","messagePattern":"Unknown version\\[(.+?)\\]","errorType":"exception","errorClass":"IAE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/data/CompressedColumnarDoublesSuppliers.java","lineNumber":72,"sourceCode":"\n    if (versionFromBuffer == LZF_VERSION || versionFromBuffer == VERSION) {\n      final int totalSize = buffer.getInt();\n      final int sizePer = buffer.getInt();\n      CompressionStrategy compression = CompressionStrategy.LZF;\n      if (versionFromBuffer == VERSION) {\n        byte compressionId = buffer.get();\n        compression = CompressionStrategy.forId(compressionId);\n      }\n      return CompressionFactory.getDoubleSupplier(\n          totalSize,\n          sizePer,\n          buffer.asReadOnlyBuffer(),\n          order,\n          compression,\n          fileMapper\n      );\n    }\n    throw new IAE(\"Unknown version[%s]\", versionFromBuffer);\n  }\n}\n","sourceCodeStart":54,"sourceCodeEnd":75,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/data/CompressedColumnarDoublesSuppliers.java#L54-L75","documentation":"CompressedColumnarDoublesSuppliers.fromByteBuffer throws IAE(\"Unknown version[%s]\") when the version byte in the serialized compressed doubles column does not match a version this Druid build supports. It protects the reader from deserializing segment data written in an unknown format.","triggerScenarios":"Loading (mmapped) a compressed doubles column whose header version is unrecognized — typically segments written by a newer Druid release being read by an older build, or corrupt segment bytes.","commonSituations":"Downgraded or mixed-version clusters where historicals lag behind the coordinator's segment format; restoring segments from backups of newer versions; hand-crafted or damaged column files.","solutions":["Upgrade the Druid nodes reading the segment to match (or exceed) the writer's version","Re-ingest the segment with the current Druid version so it uses a supported column version","Validate segment integrity on deep storage and re-download if bytes are corrupt","Align cluster versions — ensure all historicals run the same Druid release"],"exampleFix":"// before: historical on old version reads new segment -> Unknown version\n// after: upgrade historicals\n// then reload segments; or re-index:\n// druid> reindex segment with current ingest spec","handlingStrategy":"try-catch","validationCode":"// check the column's version byte before loading\nbyte version = buffer.duplicate().get(0);\nif (!SUPPORTED_DOUBLE_COLUMN_VERSIONS.contains(version)) {\n  throw new IllegalStateException(\"Compressed doubles column version \" + version + \" unsupported; upgrade Druid\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  supplier = CompressedColumnarDoublesSuppliers.fromByteBuffer(...);\n} catch (IllegalArgumentException e) {\n  if (e.getMessage().startsWith(\"Unknown version\")) {\n    throw new SegmentFormatException(\"Segment written by newer Druid; upgrade cluster or re-ingest\", e);\n  }\n  throw e;\n}","preventionTips":["Run a homogeneous Druid version across the cluster","Re-ingest old/new-version segments when migrating between releases","Validate segment files after restore from deep storage","Test segment compatibility before cluster downgrades"],"tags":["druid","segment","version","compatibility","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-14T11:17:12.474Z"}