apache/druid · error · org.apache.druid.java.util.common.RE
Failed to deserialize V%s column.
Error message
Failed to deserialize V%s column.
What it means
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.
Source
Thrown at processing/src/main/java/org/apache/druid/segment/nested/ScalarDoubleColumnAndIndexSupplier.java:169
columnName,
ColumnSerializerUtils.BITMAP_INDEX_FILE_NAME
);
GenericIndexed<ImmutableBitmap> rBitmaps = GenericIndexed.read(
valueIndexBuffer,
bitmapSerdeFactory.getObjectStrategy(),
columnBuilder.getFileMapper()
);
return new ScalarDoubleColumnAndIndexSupplier(
doubleDictionarySupplier,
encodedCol,
doubles,
rBitmaps,
bitmapSerdeFactory.getBitmapFactory(),
columnConfig
);
}
catch (IOException ex) {
throw new RE(ex, "Failed to deserialize V%s column.", version);
}
} else {
throw new RE("Unknown version " + version);
}
}
private final Supplier<FixedIndexed<Double>> doubleDictionarySupplier;
private final Supplier<ColumnarInts> encodedValuesSupplier;
private final Supplier<ColumnarDoubles> valueColumnSupplier;
private final GenericIndexed<ImmutableBitmap> valueIndexes;
private final BitmapFactory bitmapFactory;
private final ImmutableBitmap nullValueBitmap;
private final ColumnConfig columnConfig;
private ScalarDoubleColumnAndIndexSupplier(View on GitHub (pinned to 9b90983fd2)
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.
Defensive patterns
Strategy: try-catch
Validate before calling
// verify the scalar column file exists and passes a minimum size check
if (!colFile.exists() || colFile.length() == 0) { rehydrateFromDeepStorage(segmentId, columnName); } Try / catch
try {
col = supplier.get();
} catch (RE e) {
if (e.getMessage().startsWith("Failed to deserialize")) {
log.error(e, "Corrupt scalar double column; evicting cache entry %s", columnName);
cacheEvictor.evict(segmentId);
} throw e;
} Prevention
- Evict and re-download cache entries that fail deserialization
- Verify segment integrity after restores and downloads
- Re-ingest segments that repeatedly fail to read
When it happens
Trigger: Opening a scalar double column file that is truncated, corrupted, or unreadable during read of the forward index, bitmap columns, or buffers.
Common situations: Corrupt local segment cache entries; incomplete segment downloads from deep storage; interrupted segment pushes leaving partial files.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- Failed to deserialize V%s column.
- Failed to deserialize V%s column.
- Failed to deserialize V%s column.
- Input stream is null
- File[%s] too large[%d]
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/2759fc9b96c38a43.
Report an issue: GitHub.