[
https://issues.apache.org/jira/browse/CASSANALYTICS-203?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jyothsna Konisa updated CASSANALYTICS-203:
------------------------------------------
Summary: Fix UDT column deserialization in CDC (was: CDC Avro
serialization fails for UDT columns: UDT values are not converted to Avro
records)
> Fix UDT column deserialization in CDC
> -------------------------------------
>
> Key: CASSANALYTICS-203
> URL: https://issues.apache.org/jira/browse/CASSANALYTICS-203
> Project: Apache Cassandra Analytics
> Issue Type: Bug
> Components: CDC
> Reporter: Jyothsna Konisa
> Priority: Normal
> Time Spent: 20m
> Remaining Estimate: 0h
>
> CDC events with UDT columns (frozen<udt>, udt, or UDTs inside collections
> such as list<frozen<udt>>) fail to publish. The UDT value reaches the Avro
> encoder as raw bytes instead of a record:
>
>
>
> java.lang.ClassCastException: value java.nio.HeapByteBuffer[...] cannot be
> cast to expected type record_udt at CassandraCDC.payload.results[array][0]
>
>
>
>
> Root cause: the CDC codec decodes column values with
> CqlType#deserializeToJavaType, which uses Cassandra's serializers.
> Cassandra's UserTypeSerializer returns UDTs as raw bytes, and
> AvroDataUtils#toAvro only converts a Map into a UDT record. The Spark path
> avoids this by decoding through deserializeToType(TypeConverter) with
> CqlUdt#deserializeUdt; the CDC path never did.
>
>
>
> Fix: add a TypeConverter in AvroDataUtils that decodes UDT bytes with the
> existing CqlUdt#deserializeUdt, including UDTs inside collections, tuples and
> other UDTs. Use it from the four codec call sites via
> AvroDataUtils#deserialize. Types without UDTs are unchanged.
>
>
>
>
> Related: CASSSIDECAR-507 (CDC fails to deserialize nested UDT columns) fixes
> a Sidecar-side classloader issue. Both fixes are needed for the reported
> scenario.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]