From 18b5862709aa6c25d18410face773a7d14a50485 Mon Sep 17 00:00:00 2001 From: Shawn Huang Date: Mon, 27 May 2024 18:54:26 +0800 Subject: [PATCH] [FLINK-35301][cdc] Avoid deadlock when loading driver classes This closes #3300. (cherry picked from commit 6350eec66c80a4c3815dce604305d417ee862e14) --- .../base/relational/connection/JdbcConnectionPoolFactory.java | 3 +++ .../main/java/io/debezium/connector/mysql/MySqlConnection.java | 2 ++ .../mysql/source/connection/PooledDataSourceFactory.java | 2 ++ 3 files changed, 7 insertions(+) diff --git a/flink-cdc-connect/flink-cdc-source-connectors/flink-cdc-base/src/main/java/org/apache/flink/cdc/connectors/base/relational/connection/JdbcConnectionPoolFactory.java b/flink-cdc-connect/flink-cdc-source-connectors/flink-cdc-base/src/main/java/org/apache/flink/cdc/connectors/base/relational/connection/JdbcConnectionPoolFactory.java index 2049b571d7a..4ea8ea52648 100644 --- a/flink-cdc-connect/flink-cdc-source-connectors/flink-cdc-base/src/main/java/org/apache/flink/cdc/connectors/base/relational/connection/JdbcConnectionPoolFactory.java +++ b/flink-cdc-connect/flink-cdc-source-connectors/flink-cdc-base/src/main/java/org/apache/flink/cdc/connectors/base/relational/connection/JdbcConnectionPoolFactory.java @@ -23,6 +23,8 @@ import com.zaxxer.hikari.HikariDataSource; import io.debezium.jdbc.JdbcConfiguration; +import java.sql.DriverManager; + /** A connection pool factory to create pooled DataSource {@link HikariDataSource}. */ public abstract class JdbcConnectionPoolFactory { @@ -43,6 +45,7 @@ public HikariDataSource createPooledDataSource(JdbcSourceConfig sourceConfig) { config.setMinimumIdle(MINIMUM_POOL_SIZE); config.setMaximumPoolSize(sourceConfig.getConnectionPoolSize()); config.setConnectionTimeout(sourceConfig.getConnectTimeout().toMillis()); + DriverManager.getDrivers(); config.setDriverClassName(sourceConfig.getDriverClassName()); // note: the following properties should be optional (only applied to MySQL) diff --git a/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/io/debezium/connector/mysql/MySqlConnection.java b/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/io/debezium/connector/mysql/MySqlConnection.java index 84f5c230a69..801e27d6b89 100644 --- a/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/io/debezium/connector/mysql/MySqlConnection.java +++ b/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/io/debezium/connector/mysql/MySqlConnection.java @@ -26,6 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.time.Duration; @@ -622,6 +623,7 @@ public MySqlConnectionConfiguration(Configuration config, Properties jdbcPropert this.jdbcConfig = JdbcConfiguration.adapt(jdbcConfigBuilder.build()); String driverClassName = this.jdbcConfig.getString(MySqlConnectorConfig.JDBC_DRIVER); this.urlPattern = formatJdbcUrl(jdbcProperties); + DriverManager.getDrivers(); factory = JdbcConnection.patternBasedFactory( urlPattern, driverClassName, getClass().getClassLoader()); diff --git a/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/org/apache/flink/cdc/connectors/mysql/source/connection/PooledDataSourceFactory.java b/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/org/apache/flink/cdc/connectors/mysql/source/connection/PooledDataSourceFactory.java index 424a17b0f85..52bb3d84159 100644 --- a/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/org/apache/flink/cdc/connectors/mysql/source/connection/PooledDataSourceFactory.java +++ b/flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/org/apache/flink/cdc/connectors/mysql/source/connection/PooledDataSourceFactory.java @@ -23,6 +23,7 @@ import com.zaxxer.hikari.HikariDataSource; import io.debezium.connector.mysql.MySqlConnectorConfig; +import java.sql.DriverManager; import java.util.Properties; /** A connection pool factory to create pooled DataSource {@link HikariDataSource}. */ @@ -52,6 +53,7 @@ public static HikariDataSource createPooledDataSource(MySqlSourceConfig sourceCo config.setMaximumPoolSize(sourceConfig.getConnectionPoolSize()); config.setConnectionTimeout(sourceConfig.getConnectTimeout().toMillis()); config.addDataSourceProperty(SERVER_TIMEZONE_KEY, sourceConfig.getServerTimeZone()); + DriverManager.getDrivers(); config.setDriverClassName( sourceConfig.getDbzConfiguration().getString(MySqlConnectorConfig.JDBC_DRIVER));