Yifan Cai created CASSANALYTICS-178:
---------------------------------------

             Summary: CDC logs NPE for deleted column values
                 Key: CASSANALYTICS-178
                 URL: https://issues.apache.org/jira/browse/CASSANALYTICS-178
             Project: Apache Cassandra Analytics
          Issue Type: Bug
            Reporter: Yifan Cai
            Assignee: Jyothsna Konisa


It is a minor bug when converting column values to strings for logging purpose.

Column value is set to null on deletion.

The null value is handled incorrectly in 
org.apache.cassandra.cdc.CdcLogMode#columnsToString.
{code:java}
columnName="column1"
message="Failed to deserialize column value."
exception="java.lang.NullPointerException
        at 
org.apache.cassandra.utils.ByteBufferUtil.toInt(ByteBufferUtil.java:491)
        at 
org.apache.cassandra.db.marshal.ByteBufferAccessor.toInt(ByteBufferAccessor.java:208)
        at 
org.apache.cassandra.db.marshal.ByteBufferAccessor.toInt(ByteBufferAccessor.java:42)
        at 
org.apache.cassandra.serializers.CollectionSerializer.readCollectionSize(CollectionSerializer.java:147)
        at 
org.apache.cassandra.serializers.ListSerializer.deserialize(ListSerializer.java:96)
        at 
org.apache.cassandra.serializers.ListSerializer.deserialize(ListSerializer.java:35)
        at 
org.apache.cassandra.serializers.TypeSerializer.deserialize(TypeSerializer.java:45)
        at 
org.apache.cassandra.spark.data.AbstractCqlType.deserializeToJavaType(AbstractCqlType.java:63)
        at 
org.apache.cassandra.spark.data.CqlField$CqlType.deserializeToJavaType(CqlField.java:149)
        at 
org.apache.cassandra.cdc.CdcLogMode.columnToString(CdcLogMode.java:161)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at 
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
        at 
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at 
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at 
java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at 
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at 
java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at 
org.apache.cassandra.cdc.CdcLogMode.columnsToString(CdcLogMode.java:175)
        at org.apache.cassandra.cdc.CdcLogMode$3.info(CdcLogMode.java:107)
        at 
org.apache.cassandra.cdc.kafka.KafkaPublisher.processEvent(KafkaPublisher.java:168)
{code}
Later, the column is logged as `[column1 : unknown]` in 
org.apache.cassandra.cdc.kafka.KafkaPublisher.

CdcLogMode should
 # stop logging at the error level, as it is not a true failure.
 # correctly handle the null value, i.e. logging the null value, instead of 
unknown.



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