DBZ-5756 Add Compression Advisor tables as system-excluded tables
This commit is contained in:
parent
5bf3dad9fd
commit
993a547c2f
@ -12,6 +12,7 @@
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.apache.kafka.common.config.ConfigDef;
|
import org.apache.kafka.common.config.ConfigDef;
|
||||||
@ -1208,6 +1209,12 @@ private static LogMiningBufferType parse(String value, String defaultValue) {
|
|||||||
*/
|
*/
|
||||||
private static class SystemTablesPredicate implements TableFilter {
|
private static class SystemTablesPredicate implements TableFilter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pattern that matches temporary analysis tables created by the Compression Advisor subsystem.
|
||||||
|
* These tables will be ignored by the connector.
|
||||||
|
*/
|
||||||
|
private final Pattern COMPRESSION_ADVISOR = Pattern.compile("^CMP[3|4]\\$[0-9]+$");
|
||||||
|
|
||||||
private final Configuration config;
|
private final Configuration config;
|
||||||
|
|
||||||
SystemTablesPredicate(Configuration config) {
|
SystemTablesPredicate(Configuration config) {
|
||||||
@ -1216,7 +1223,7 @@ private static class SystemTablesPredicate implements TableFilter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isIncluded(TableId t) {
|
public boolean isIncluded(TableId t) {
|
||||||
return !isExcludedSchema(t) && !isFlushTable(t);
|
return !isExcludedSchema(t) && !isFlushTable(t) && !isCompressionAdvisorTable(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isExcludedSchema(TableId id) {
|
private boolean isExcludedSchema(TableId id) {
|
||||||
@ -1226,6 +1233,10 @@ private boolean isExcludedSchema(TableId id) {
|
|||||||
private boolean isFlushTable(TableId id) {
|
private boolean isFlushTable(TableId id) {
|
||||||
return LogWriterFlushStrategy.isFlushTable(id, config.getString(USER));
|
return LogWriterFlushStrategy.isFlushTable(id, config.getString(USER));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isCompressionAdvisorTable(TableId id) {
|
||||||
|
return COMPRESSION_ADVISOR.matcher(id.table()).matches();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -2777,6 +2777,78 @@ public void shouldFilterUser() throws Exception {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@FixFor("DBZ-5756")
|
||||||
|
public void testShouldIgnoreCompressionAdvisorTablesDuringSnapshotAndStreaming() throws Exception {
|
||||||
|
// This test creates a dummy table to mimic the creation of a compression advisor table.
|
||||||
|
TestHelper.dropTable(connection, "CMP3$12345");
|
||||||
|
try {
|
||||||
|
|
||||||
|
// Create the advisor table prior to the connector starting
|
||||||
|
connection.execute("CREATE TABLE CMP3$12345 (id numeric(9,0), id2 numeric(9,0), data varchar2(50), primary key(id, id2))");
|
||||||
|
TestHelper.streamTable(connection, "CMP3$12345");
|
||||||
|
|
||||||
|
// insert some data
|
||||||
|
connection.execute("INSERT INTO CMP3$12345 (id,id2,data) values (1, 1, 'data')");
|
||||||
|
|
||||||
|
Configuration config = TestHelper.defaultConfig().with(OracleConnectorConfig.TABLE_INCLUDE_LIST, "DEBEZIUM\\.CMP.*").build();
|
||||||
|
start(OracleConnector.class, config);
|
||||||
|
assertConnectorIsRunning();
|
||||||
|
|
||||||
|
waitForStreamingRunning(TestHelper.CONNECTOR_NAME, TestHelper.SERVER_NAME);
|
||||||
|
|
||||||
|
// insert some data
|
||||||
|
connection.execute("INSERT INTO CMP3$12345 (id,id2,data) values (2, 2, 'data')");
|
||||||
|
|
||||||
|
try {
|
||||||
|
Awaitility.await().atMost(Duration.ofSeconds(10)).until(() -> {
|
||||||
|
assertNoRecordsToConsume();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (ConditionTimeoutException e) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
TestHelper.dropTable(connection, "CMP3$12345");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@FixFor("DBZ-5756")
|
||||||
|
public void testShouldIgnoreCompressionAdvisorTablesDuringStreaming() throws Exception {
|
||||||
|
// This test creates a dummy table to mimic the creation of a compression advisor table.
|
||||||
|
TestHelper.dropTable(connection, "CMP3$12345");
|
||||||
|
try {
|
||||||
|
Configuration config = TestHelper.defaultConfig().with(OracleConnectorConfig.TABLE_INCLUDE_LIST, "DEBEZIUM\\.CMP.*").build();
|
||||||
|
start(OracleConnector.class, config);
|
||||||
|
assertConnectorIsRunning();
|
||||||
|
|
||||||
|
waitForStreamingRunning(TestHelper.CONNECTOR_NAME, TestHelper.SERVER_NAME);
|
||||||
|
|
||||||
|
// Create the advisor table while the connector is running
|
||||||
|
connection.execute("CREATE TABLE CMP3$12345 (id numeric(9,0), id2 numeric(9,0), data varchar2(50), primary key(id, id2))");
|
||||||
|
TestHelper.streamTable(connection, "CMP3$12345");
|
||||||
|
|
||||||
|
// insert some data
|
||||||
|
connection.execute("INSERT INTO CMP3$12345 (id,id2,data) values (1, 1, 'data')");
|
||||||
|
|
||||||
|
try {
|
||||||
|
Awaitility.await().atMost(Duration.ofSeconds(10)).until(() -> {
|
||||||
|
assertNoRecordsToConsume();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (ConditionTimeoutException e) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
TestHelper.dropTable(connection, "CMP3$12345");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private <T> T getStreamingMetric(String metricName) throws JMException {
|
private <T> T getStreamingMetric(String metricName) throws JMException {
|
||||||
final MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
|
final MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
|
||||||
|
Loading…
Reference in New Issue
Block a user