{"record":{"id":"cd883a7f8c6b1f61","repo":"apache/druid","slug":"failed-to-deserialize-v-s-column-cd883a","errorCode":null,"errorMessage":"Failed to deserialize V%s column.","messagePattern":"Failed to deserialize V(.+?) column\\.","errorType":"exception","errorClass":"RE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSupplierV4.java","lineNumber":212,"sourceCode":"            version,\n            metadata.getFileNameBase(),\n            columnConfig,\n            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;","sourceCodeStart":194,"sourceCodeEnd":230,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSupplierV4.java#L194-L230","documentation":"NestedDataColumnSupplierV4.read() deserializes V4 nested columns, including loading the column metadata (logical type, byte order, bitmap serde) then the shared dictionary state. An IOException during this read is wrapped as RE 'Failed to deserialize V%s column.', meaning the V4 column bytes on disk could not be parsed.","triggerScenarios":"Reading a V4 nested column file that is truncated, corrupted, or otherwise unreadable while reconstructing metadata, dictionaries, or bitmaps.","commonSituations":"Interrupted segment push or download leaving partial files; local segment cache corruption; deep-storage object truncated.","solutions":["Evict the corrupted segment from the local segment cache and let it re-download.","Re-fetch the segment from deep storage and validate it (Druid segment metadata/checksums).","Re-ingest the affected time chunks to rebuild columns.","Investigate disk/storage failures if corruption repeats."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// confirm the V4 column blob exists and is not truncated before reading\nif (columnFile.length() < expectedMinSize) { triggerResyncFromDeepStorage(); }","typeGuard":null,"tryCatchPattern":"try {\n  col = supplier.get();\n} catch (RE e) {\n  if (e.getMessage().startsWith(\"Failed to deserialize\")) {\n    log.error(e, \"V4 column unreadable; evict and re-download segment %s\", segmentId);\n  } throw e;\n}","preventionTips":["Ensure deep-storage downloads complete atomically before swapping into cache","Run disk health checks on historical nodes","Keep consistent Druid versions across the cluster"],"tags":["druid","segment","deserialization","io"],"backgroundTag":"file-read-failed","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}