apache/druid · error · IAE
Unknown version[%s]
Error message
Unknown version[%s]
What it means
CompressedColumnarDoublesSuppliers.fromByteBuffer throws IAE("Unknown version[%s]") when the version byte in the serialized compressed doubles column does not match a version this Druid build supports. It protects the reader from deserializing segment data written in an unknown format.
Source
Thrown at processing/src/main/java/org/apache/druid/segment/data/CompressedColumnarDoublesSuppliers.java:72
if (versionFromBuffer == LZF_VERSION || versionFromBuffer == VERSION) {
final int totalSize = buffer.getInt();
final int sizePer = buffer.getInt();
CompressionStrategy compression = CompressionStrategy.LZF;
if (versionFromBuffer == VERSION) {
byte compressionId = buffer.get();
compression = CompressionStrategy.forId(compressionId);
}
return CompressionFactory.getDoubleSupplier(
totalSize,
sizePer,
buffer.asReadOnlyBuffer(),
order,
compression,
fileMapper
);
}
throw new IAE("Unknown version[%s]", versionFromBuffer);
}
}
View on GitHub (pinned to 9b90983fd2)
Solutions
- Upgrade the Druid nodes reading the segment to match (or exceed) the writer's version
- Re-ingest the segment with the current Druid version so it uses a supported column version
- Validate segment integrity on deep storage and re-download if bytes are corrupt
- Align cluster versions — ensure all historicals run the same Druid release
Example fix
// before: historical on old version reads new segment -> Unknown version // after: upgrade historicals // then reload segments; or re-index: // druid> reindex segment with current ingest spec
Defensive patterns
Strategy: try-catch
Validate before calling
// check the column's version byte before loading
byte version = buffer.duplicate().get(0);
if (!SUPPORTED_DOUBLE_COLUMN_VERSIONS.contains(version)) {
throw new IllegalStateException("Compressed doubles column version " + version + " unsupported; upgrade Druid");
} Try / catch
try {
supplier = CompressedColumnarDoublesSuppliers.fromByteBuffer(...);
} catch (IllegalArgumentException e) {
if (e.getMessage().startsWith("Unknown version")) {
throw new SegmentFormatException("Segment written by newer Druid; upgrade cluster or re-ingest", e);
}
throw e;
} Prevention
- Run a homogeneous Druid version across the cluster
- Re-ingest old/new-version segments when migrating between releases
- Validate segment files after restore from deep storage
- Test segment compatibility before cluster downgrades
When it happens
Trigger: Loading (mmapped) a compressed doubles column whose header version is unrecognized — typically segments written by a newer Druid release being read by an older build, or corrupt segment bytes.
Common situations: Downgraded or mixed-version clusters where historicals lag behind the coordinator's segment format; restoring segments from backups of newer versions; hand-crafted or damaged column files.
Related errors
- Unknown version[%s]
- Unknown version %s
- Unknown version[%d]
- Expected version[9], got[%d]
- Unknown version[%s]
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/bf2f830900082503.
Report an issue: GitHub.