{"record":{"id":"c015d22e28e17388","repo":"apache/druid","slug":"unknown-version-c015d2","errorCode":null,"errorMessage":"Unknown version ","messagePattern":"Unknown version ","errorType":"exception","errorClass":"RE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSupplierV4.java","lineNumber":215,"sourceCode":"            fields,\n            fieldInfo,\n            compressedRawColumnSupplier,\n            nullValues,\n            stringDictionarySupplier,\n            longDictionarySupplier,\n            doubleDictionarySupplier,\n            arrayDictionarySupplier,\n            mapper,\n            NestedCommonFormatColumnFormatSpec.builder().setBitmapEncoding(metadata.getBitmapSerdeFactory()).build(),\n            metadata.getByteOrder(),\n            simpleType\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  private final byte version;\n  private final String columnName;\n  private final ColumnConfig columnConfig;\n  private final Supplier<? extends Indexed<ByteBuffer>> fieldsSupplier;\n  private final FieldTypeInfo fieldInfo;\n  private final CompressedVariableSizedBlobColumnSupplier compressedRawColumnSupplier;\n  private final ImmutableBitmap nullValues;\n  private final Supplier<? extends Indexed<ByteBuffer>> stringDictionarySupplier;\n  private final Supplier<FixedIndexed<Long>> longDictionarySupplier;\n  private final Supplier<FixedIndexed<Double>> doubleDictionarySupplier;\n  private final Supplier<FrontCodedIntArrayIndexed> arrayDictionarySupplier;\n  private final SegmentFileMapper fileMapper;\n\n  @Nullable\n  private final ColumnType simpleType;","sourceCodeStart":197,"sourceCodeEnd":233,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSupplierV4.java#L197-L233","documentation":"NestedDataColumnSupplierV4.read() recognizes only version byte V4. Any other version byte throws RE 'Unknown version <n>'. Since this supplier only handles V4, encountering another version means the column was written by a different (usually newer) format version or the file is damaged.","triggerScenarios":"Opening a column whose version byte differs from V4 (e.g. written as V1-V3 handled by another supplier, or a V5+ from a newer Druid, or garbage bytes).","commonSituations":"Wiring the V4 supplier against non-V4 columns; newer writer version read by older cluster; corrupt column headers.","solutions":["Use/upgrade to the Druid version matching the column's serialized version.","Let the correct supplier for the version handle the column (check NestedDataColumnSupplier dispatch logic).","Re-ingest to rewrite columns in the supported format.","Restore the segment from deep storage if the header is corrupted."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"byte version = data.get(0);\nif (version != 4) { /* dispatch to the correct supplier for this version */ }","typeGuard":"boolean isV4(byte v) { return v == 4; }","tryCatchPattern":"try {\n  col = v4Supplier.get();\n} catch (RE e) {\n  if (e.getMessage().startsWith(\"Unknown version\")) {\n    log.warn(\"Non-V4 column handed to V4 supplier; re-dispatch\");\n  } throw e;\n}","preventionTips":["Dispatch suppliers based on the version byte, not assumptions","Only use NestedDataColumnSupplierV4 for V4 columns","Upgrade readers before writers introduce new versions"],"tags":["druid","segment","version","backward-compatibility"],"backgroundTag":"incompatible-source-type","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"}