[ 
https://issues.apache.org/jira/browse/CASSSIDECAR-507?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jyothsna Konisa reassigned CASSSIDECAR-507:
-------------------------------------------

    Assignee: Jyothsna Konisa

> CDC fails to deserialize nested UDT columns
> -------------------------------------------
>
>                 Key: CASSSIDECAR-507
>                 URL: https://issues.apache.org/jira/browse/CASSSIDECAR-507
>             Project: Sidecar for Apache Cassandra
>          Issue Type: Bug
>          Components: Configuration
>            Reporter: Laxmikant Upadhyay
>            Assignee: Jyothsna Konisa
>            Priority: Major
>
> While testing Cassandra CDC using the {{*docker/cdc-demo*}} \{*}setup from 
> the Apache Cassandra Sidecar trunk branch{*}, with the locally built 
> {{*cassandra-sidecar:dev*}} \{*}Docker image{*}, I encountered a 
> {{ClassCastException}} when processing CDC mutations containing nested UDT 
> columns.
> h3. Steps to Reproduce using docker compose cdc-demo
>  
> {code:java}
> 1. Create a simple UDT
>  
> {{CREATE TYPE IF NOT EXISTS cdc_demo.task_result (
> status text,
> message text
> );}}
> 2. Create a CDC-enabled table containing a list of frozen UDTs
>  
> {{CREATE TABLE IF NOT EXISTS cdc_demo.task (
> id uuid PRIMARY KEY,
> name text,
> results list<frozen<task_result>>
> ) WITH cdc = true;}}
> 3. Insert a record containing the UDT collection
>  
> {{INSERT INTO cdc_demo.task (
> id,
> name,
> results
> ) VALUES (
> 11111111-1111-1111-1111-111111111111,
> 'test-task',
> [
> { status: 'SUCCESS', message: 'completed' }
> ]
> );}}
> {code}
>  
> *4. Observe Sidecar CDC logs*
> The CDC consumer detects the mutation and resolves the correct Kafka topic, 
> but fails while deserializing the {{results}} column.
>  
>  
> {code:java}
> {{ERROR CdcLogMode.java:166 - Failed to deserialize column value. 
> columnName=results
> java.lang.ClassCastException: null
> INFO CdcLogMode.java:104 - Processing CDC event.
> kind=INSERT keyspace=cdc_demo table=task
> partitionKeys=[id : 11111111-1111-1111-1111-111111111111]
> clusteringKeys=null
> valueColumns=[name : test-task], [results : unknown]
> topic=cdc-mutations-cdc_demo-task
> WARN CdcLogMode.java:113 - Skip publishing the event because it cannot be 
> serialized.}}
> {code}
>  
> *In a separate reproduction using a below schema, the exception included 
> additional classloader details:*
>  
> {code:java}
> – 1. Create transient_event UDT
> CREATE TYPE IF NOT EXISTS cdc_demo.transient_event (
>     id uuid,
>     event_class text
> );
> – 2. Create execution_result UDT
> CREATE TYPE IF NOT EXISTS cdc_demo.execution_result (
>     domain_event frozen<transient_event>,
>     status text
> );
> – 3. Create command table with CDC enabled
> CREATE TABLE IF NOT EXISTS cdc_demo.command (
>     id uuid PRIMARY KEY,
>     command_class text,
>     execution_results list<frozen<execution_result>>
> ) WITH cdc = true;
>  
> {{INSERT INTO cdc_demo.task (
> id,
> name,
> results
> ) VALUES (
> 11111111-1111-1111-1111-111111111111,
> 'test-task',
> [
> {
> status: 'SUCCESS',
> message: 'completed'
> }
> ]
> );}}
> {{}}
> {code}
>  
> {{you will observe:}}
>  
> {code:java}
> {{java.lang.ClassCastException:
> class org.apache.cassandra.spark.data.complex.CqlUdt
> cannot be cast to
> class org.apache.cassandra.spark.data.CqlType
> (org.apache.cassandra.spark.data.complex.CqlUdt
> is in unnamed module of loader
> org.apache.cassandra.bridge.PostDelegationClassLoader @7b1655c3;
> org.apache.cassandra.spark.data.CqlType
> is in unnamed module of loader
> org.apache.cassandra.bridge.PostDelegationClassLoader @38afe24f)}}
> {code}
>  
> h3. Expected Behavior
> CDC should successfully deserialize UDT column values and publish the 
> mutation to the configured Kafka topic.



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