DBZ-6864 - Debezium-MySQL not filtering AWS RDS internal events

This commit is contained in:
Breno Moreira 2023-09-01 16:32:44 -03:00 committed by Jiri Pechanec
parent 0dd0ff7306
commit 3a2e141c56
2 changed files with 11 additions and 1 deletions

View File

@ -78,7 +78,7 @@ public interface SchemaHistory {
.withType(Type.STRING) .withType(Type.STRING)
.withDefault( .withDefault(
"DROP TEMPORARY TABLE IF EXISTS .+ /\\* generated by server \\*/," + "DROP TEMPORARY TABLE IF EXISTS .+ /\\* generated by server \\*/," +
// Filter out RDS heartbeat statements, see DBZ-469 // Filter out RDS heartbeat statements, see DBZ-469 / DBZ-1492 / DBZ-2275 / DBZ-6864
"INSERT INTO mysql.rds_heartbeat2\\(.*\\) values \\(.*\\) ON DUPLICATE KEY UPDATE value = .*," + "INSERT INTO mysql.rds_heartbeat2\\(.*\\) values \\(.*\\) ON DUPLICATE KEY UPDATE value = .*," +
"DELETE FROM mysql.rds_sysinfo.*," + "DELETE FROM mysql.rds_sysinfo.*," +
"INSERT INTO mysql.rds_sysinfo\\(.*\\) values \\(.*\\)," + "INSERT INTO mysql.rds_sysinfo\\(.*\\) values \\(.*\\)," +
@ -88,6 +88,7 @@ public interface SchemaHistory {
"FLUSH RELAY LOGS.*," + "FLUSH RELAY LOGS.*," +
"flush relay logs.*," + "flush relay logs.*," +
"SAVEPOINT .*," + "SAVEPOINT .*," +
"SET STATEMENT .*," +
// Filter out the comment start with "# Dummy event" according https://jira.mariadb.org/browse/MDEV-225 // Filter out the comment start with "# Dummy event" according https://jira.mariadb.org/browse/MDEV-225
"^\\s*#\\s*Dummy event.*") "^\\s*#\\s*Dummy event.*")
.withWidth(Width.LONG) .withWidth(Width.LONG)

View File

@ -390,4 +390,13 @@ public void testConfigurationMerge() {
assertThat(dbConfig.keys().size()).isEqualTo(2); assertThat(dbConfig.keys().size()).isEqualTo(2);
assertThat(dbConfig.getString("user")).isEqualTo("mysqluser"); assertThat(dbConfig.getString("user")).isEqualTo("mysqluser");
} }
@Test
@FixFor("DBZ-6864")
public void defaultDdlFilterShouldFilterOutRdsSetStatements() {
String defaultDdlFilter = Configuration.create().build().getString(SchemaHistory.DDL_FILTER);
Predicate<String> ddlFilter = Predicates.includes(defaultDdlFilter, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
assertThat(ddlFilter.test("SET STATEMENT max_statement_time=60 FOR DELETE FROM mysql.rds_sysinfo where name = 'innodb_txn_key'")).isTrue();
assertThat(ddlFilter.test("SET STATEMENT max_statement_time=60 FOR INSERT INTO mysql.rds_heartbeat2(id, value) values (1,1692866524004) ON DUPLICATE KEY UPDATE value = 1692866524004")).isTrue();
}
} }