{"record":{"id":"2759fc9b96c38a43","repo":"apache/druid","slug":"failed-to-deserialize-v-s-column-2759fc","errorCode":null,"errorMessage":"Failed to deserialize V%s column.","messagePattern":"Failed to deserialize V(.+?) column\\.","errorType":"exception","errorClass":"org.apache.druid.java.util.common.RE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/nested/ScalarDoubleColumnAndIndexSupplier.java","lineNumber":169,"sourceCode":"            columnName,\n            ColumnSerializerUtils.BITMAP_INDEX_FILE_NAME\n        );\n        GenericIndexed<ImmutableBitmap> rBitmaps = GenericIndexed.read(\n            valueIndexBuffer,\n            bitmapSerdeFactory.getObjectStrategy(),\n            columnBuilder.getFileMapper()\n        );\n        return new ScalarDoubleColumnAndIndexSupplier(\n            doubleDictionarySupplier,\n            encodedCol,\n            doubles,\n            rBitmaps,\n            bitmapSerdeFactory.getBitmapFactory(),\n            columnConfig\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 Supplier<FixedIndexed<Double>> doubleDictionarySupplier;\n\n  private final Supplier<ColumnarInts> encodedValuesSupplier;\n  private final Supplier<ColumnarDoubles> valueColumnSupplier;\n\n  private final GenericIndexed<ImmutableBitmap> valueIndexes;\n\n  private final BitmapFactory bitmapFactory;\n  private final ImmutableBitmap nullValueBitmap;\n  private final ColumnConfig columnConfig;\n\n  private ScalarDoubleColumnAndIndexSupplier(","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/nested/ScalarDoubleColumnAndIndexSupplier.java#L151-L187","documentation":"ScalarDoubleColumnAndIndexSupplier.read() deserializes a scalar double column (forward index, dictionaries, bitmaps). An IOException while reading the column parts is wrapped as RE 'Failed to deserialize V%s column.', indicating the on-disk double column could not be parsed for its version.","triggerScenarios":"Opening a scalar double column file that is truncated, corrupted, or unreadable during read of the forward index, bitmap columns, or buffers.","commonSituations":"Corrupt local segment cache entries; incomplete segment downloads from deep storage; interrupted segment pushes leaving partial files.","solutions":["Delete the corrupted segment from the local cache and allow re-download.","Re-restore the segment from deep storage and verify integrity.","Re-ingest the affected segments if deep storage copies are also bad.","Check disk health/network reliability if corruption recurs."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// verify the scalar column file exists and passes a minimum size check\nif (!colFile.exists() || colFile.length() == 0) { rehydrateFromDeepStorage(segmentId, columnName); }","typeGuard":null,"tryCatchPattern":"try {\n  col = supplier.get();\n} catch (RE e) {\n  if (e.getMessage().startsWith(\"Failed to deserialize\")) {\n    log.error(e, \"Corrupt scalar double column; evicting cache entry %s\", columnName);\n    cacheEvictor.evict(segmentId);\n  } throw e;\n}","preventionTips":["Evict and re-download cache entries that fail deserialization","Verify segment integrity after restores and downloads","Re-ingest segments that repeatedly fail to read"],"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"}