[ 
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]

Reply via email to