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

  1. Delete the corrupted segment from the local cache and allow re-download.
  2. Re-restore the segment from deep storage and verify integrity.
  3. Re-ingest the affected segments if deep storage copies are also bad.
  4. 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

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


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/2759fc9b96c38a43. Report an issue: GitHub.