Skip to content

Commit

Permalink
STAR-1598 port CNDB-3932 (apache#509)
Browse files Browse the repository at this point in the history
If a user creates a prepared statement for a table and then enables
the CDC param, the prepared statement must be invalidated.

If we don't invalidate the prepared statement it'll be executed using
the old TableMetadata object and take the non-CDC write path and go
directly to CNDB writers instead of via Pulsar topics.
  • Loading branch information
jtgrabowski committed Aug 17, 2022
1 parent 65674a6 commit 1bed2e7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/java/org/apache/cassandra/schema/TableMetadata.java
Expand Up @@ -557,6 +557,7 @@ boolean changeAffectsPreparedStatements(TableMetadata updated)
|| !regularAndStaticColumns.equals(updated.regularAndStaticColumns)
|| !indexes.equals(updated.indexes)
|| params.defaultTimeToLive != updated.params.defaultTimeToLive
|| params.cdc != updated.params.cdc
|| params.gcGraceSeconds != updated.params.gcGraceSeconds
|| ( !Flag.isCQLTable(flags) && Flag.isCQLTable(updated.flags) );
}
Expand Down
19 changes: 19 additions & 0 deletions test/unit/org/apache/cassandra/schema/TableMetadataTest.java
Expand Up @@ -148,4 +148,23 @@ public void testMemtableParams()
assertThat(memtableParams.factory).isInstanceOf(CustomMemtableFactory.class);
assertThat(memtableParams.options).isEmpty();
}

@Test
public void testCdcParamsChangeAffectsPreparedStatements()
{
String keyspaceName = "ks1";
String tableName = "tbl1";
TableParams noCdcParams = TableParams.builder().cdc(false).build();
TableParams cdcParams = TableParams.builder().cdc(true).build();

TableMetadata metadata = TableMetadata.builder(keyspaceName, tableName)
.addPartitionKeyColumn("key", UTF8Type.instance)
.params(noCdcParams)
.build();
TableMetadata updated = TableMetadata.builder(keyspaceName, tableName)
.addPartitionKeyColumn("key", UTF8Type.instance)
.params(cdcParams)
.build();
assertThat(metadata.changeAffectsPreparedStatements(updated)).isTrue();
}
}

0 comments on commit 1bed2e7

Please sign in to comment.