From f9b679167c13908928d6597c43e8c15e9955df8e Mon Sep 17 00:00:00 2001 From: Stavros Champilomatis Date: Thu, 18 Jan 2024 12:41:02 +0100 Subject: [PATCH] DBZ-7363 Debezium stops producing events on schema changes in cassandra4 Adjust cassandra4 schema listener to use old table metadata Table ID when replacing the metadata in Cassandra 4 Schema Provider. Replace current logic of calculating the uuid from keyspace name and table name which does not match. --- .../cassandra/Cassandra4SchemaChangeListener.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cassandra-4/src/main/java/io/debezium/connector/cassandra/Cassandra4SchemaChangeListener.java b/cassandra-4/src/main/java/io/debezium/connector/cassandra/Cassandra4SchemaChangeListener.java index 28658586..3afdb76b 100644 --- a/cassandra-4/src/main/java/io/debezium/connector/cassandra/Cassandra4SchemaChangeListener.java +++ b/cassandra-4/src/main/java/io/debezium/connector/cassandra/Cassandra4SchemaChangeListener.java @@ -21,7 +21,6 @@ import org.apache.cassandra.schema.TableId; import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.schema.TableMetadataRef; -import org.apache.commons.lang3.ArrayUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -243,13 +242,10 @@ else if (oldCdc) { newCdc); // else if it was not cdc before nor now, do nothing with schema holder // but add it to Cassandra for subsequent deserialization path in every case - - UUID uuid = UUID.nameUUIDFromBytes(ArrayUtils.addAll(newTableMetadata.getKeyspace().toString().getBytes(), - newTableMetadata.getName().toString().getBytes())); - + // we need to use the id of the existing table to correctly replace it org.apache.cassandra.schema.TableMetadata metadata = CreateTableStatement.parse(newTableMetadata.describe(true), newTableMetadata.getKeyspace().toString()) - .id(TableId.fromUUID(uuid)) + .id(TableId.fromUUID(oldTableMetaData.getId().get())) .build(); org.apache.cassandra.schema.KeyspaceMetadata current = Schema.instance.getKeyspaceMetadata(metadata.keyspace);