{"record":{"id":"48169979c8727bb3","repo":"apache/druid","slug":"unknown-version-s-481699","errorCode":null,"errorMessage":"Unknown version %s","messagePattern":"Unknown version (.+?)","errorType":"exception","errorClass":"RE","httpStatus":null,"severity":"critical","filePath":"processing/src/main/java/org/apache/druid/segment/serde/CompressedComplexColumnSupplier.java","lineNumber":96,"sourceCode":"        if (metadata.hasNulls()) {\n          columnBuilder.setHasNulls(true);\n          final ByteBuffer nullIndexBuffer = NestedCommonFormatColumnPartSerde.loadInternalFile(\n              mapper,\n              metadata.getFileNameBase(),\n              ColumnSerializerUtils.NULL_BITMAP_FILE_NAME\n          );\n          nullValues = metadata.getBitmapSerdeFactory().getObjectStrategy().fromByteBufferWithSize(nullIndexBuffer);\n        } else {\n          nullValues = metadata.getBitmapSerdeFactory().getBitmapFactory().makeEmptyImmutableBitmap();\n        }\n\n        return new CompressedComplexColumnSupplier<>(typeName, objectStrategy, compressedColumnSupplier, nullValues);\n      }\n      catch (IOException ex) {\n        throw new RE(ex, \"Failed to deserialize V%s column.\", version);\n      }\n    }\n    throw new RE(\"Unknown version \" + version);\n  }\n\n  private final String typeName;\n  private final ObjectStrategy<T> objectStrategy;\n  private final CompressedVariableSizedBlobColumnSupplier compressedColumnSupplier;\n  private final ImmutableBitmap nullValues;\n\n  private CompressedComplexColumnSupplier(\n      String typeName,\n      ObjectStrategy<T> objectStrategy,\n      CompressedVariableSizedBlobColumnSupplier compressedColumnSupplier,\n      ImmutableBitmap nullValues\n  )\n  {\n    this.typeName = typeName;\n    this.objectStrategy = objectStrategy;\n    this.compressedColumnSupplier = compressedColumnSupplier;\n    this.nullValues = nullValues;","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/serde/CompressedComplexColumnSupplier.java#L78-L114","documentation":"CompressedComplexColumnSupplier.read dispatches on a stored column format version (e.g. VERSION 3/4). If the version byte in the column is not one it knows, it throws this RE. This means the segment column was written by an incompatible (usually newer or non-Druid) writer and cannot be read by this Druid version.","triggerScenarios":"Reading a compressed complex column whose serialized version byte is neither of the values handled by read() — typically a segment written by a newer Druid version or corrupted data where the version field is garbage.","commonSituations":"Downgrading Druid: running an older Druid version against segments written by a newer version; extension version mismatch between writer and reader for custom complex types; segment file corruption flipping the version byte.","solutions":["Upgrade the Druid cluster to a version that supports the segment's column version (match the version that wrote the segments).","Do not downgrade Druid below the version that produced existing segments; re-ingest into the older format if downgrade is required.","Ensure writer and reader extension versions for the complex type match across the cluster.","If a single segment is suspect (corruption), restore or re-ingest that segment."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// pin the cluster to one Druid version and verify before upgrade/downgrade:\n// segment version compatibility is documented per Druid release; never roll back below the writer version.","typeGuard":null,"tryCatchPattern":"try {\n    return segment.getColumn(columnName);\n} catch (RE e) {\n    if (e.getMessage().startsWith(\"Unknown version\")) {\n        throw new IllegalStateException(\"Druid version too old for segment \" + segmentId + \"; upgrade required\", e);\n    }\n    throw e;\n}","preventionTips":["Never downgrade Druid below the version that wrote existing segments.","Keep all nodes (historicals, middle managers) on the same Druid version.","Re-ingest data before intentionally switching segment formats."],"tags":["druid","segment","version-mismatch","deserialization","compatibility"],"backgroundTag":"unsupported-enum-value","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}