This is an automated email from the ASF dual-hosted git repository.
wanghailin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new c30a2a1b1 [Bugfix][zeta] Fix the deadlock issue with JDBC driver
loading (#4878)
c30a2a1b1 is described below
commit c30a2a1b1c989d71082e7d501752f0d2d2c3601f
Author: ic4y <[email protected]>
AuthorDate: Tue Jun 6 17:00:41 2023 +0800
[Bugfix][zeta] Fix the deadlock issue with JDBC driver loading (#4878)
---
.../connection/JdbcConnectionPoolFactory.java | 1 -
.../source/source/SqlServerIncrementalSource.java | 17 +++++++++++------
.../connection/SimpleJdbcConnectionProvider.java | 12 ------------
3 files changed, 11 insertions(+), 19 deletions(-)
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
index a13d6d137..9a9df5959 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java
@@ -43,7 +43,6 @@ public abstract class JdbcConnectionPoolFactory {
config.setMaximumPoolSize(sourceConfig.getConnectionPoolSize());
config.setConnectionTimeout(sourceConfig.getConnectTimeoutMillis());
config.addDataSourceProperty(SERVER_TIMEZONE_KEY,
sourceConfig.getServerTimeZone());
- config.setDriverClassName(sourceConfig.getDriverClassName());
// optional optimization configurations for pooled DataSource
config.addDataSourceProperty("cachePrepStmts", "true");
diff --git
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/source/source/SqlServerIncrementalSource.java
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/source/source/SqlServerIncrementalSource.java
index a92d8831e..cf9cf84b8 100644
---
a/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/source/source/SqlServerIncrementalSource.java
+++
b/seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/source/source/SqlServerIncrementalSource.java
@@ -24,6 +24,7 @@ import org.apache.seatunnel.api.source.SupportParallelism;
import org.apache.seatunnel.api.table.type.SeaTunnelDataType;
import org.apache.seatunnel.api.table.type.SeaTunnelRow;
import org.apache.seatunnel.common.utils.JdbcUrlUtil;
+import org.apache.seatunnel.common.utils.SeaTunnelException;
import org.apache.seatunnel.connectors.cdc.base.config.JdbcSourceConfig;
import org.apache.seatunnel.connectors.cdc.base.config.SourceConfig;
import org.apache.seatunnel.connectors.cdc.base.dialect.DataSourceDialect;
@@ -111,12 +112,16 @@ public class SqlServerIncrementalSource<T> extends
IncrementalSource<T, JdbcSour
(SqlServerSourceConfig) this.configFactory.create(0);
TableId tableId =
this.dataSourceDialect.discoverDataCollections(sqlServerSourceConfig).get(0);
- SqlServerConnection sqlServerConnection =
-
createSqlServerConnection(sqlServerSourceConfig.getDbzConfiguration());
- Table table =
- ((SqlServerDialect) dataSourceDialect)
- .queryTableSchema(sqlServerConnection, tableId)
- .getTable();
+ Table table;
+ try (SqlServerConnection sqlServerConnection =
+
createSqlServerConnection(sqlServerSourceConfig.getDbzConfiguration())) {
+ table =
+ ((SqlServerDialect) dataSourceDialect)
+ .queryTableSchema(sqlServerConnection, tableId)
+ .getTable();
+ } catch (Exception e) {
+ throw new SeaTunnelException(e);
+ }
physicalRowType = convertFromTable(table);
} else {
physicalRowType = dataType;
diff --git
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/connection/SimpleJdbcConnectionProvider.java
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/connection/SimpleJdbcConnectionProvider.java
index 4358535a2..815d51a3f 100644
---
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/connection/SimpleJdbcConnectionProvider.java
+++
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/connection/SimpleJdbcConnectionProvider.java
@@ -48,18 +48,6 @@ public class SimpleJdbcConnectionProvider implements
JdbcConnectionProvider, Ser
private transient Driver loadedDriver;
private transient Connection connection;
- static {
- // Load DriverManager first to avoid deadlock between DriverManager's
- // static initialization block and specific driver class's static
- // initialization block when two different driver classes are loading
- // concurrently using Class.forName while DriverManager is
uninitialized
- // before.
- //
- // This could happen in JDK 8 but not above as driver loading has been
- // moved out of DriverManager's static initialization block since JDK
9.
- DriverManager.getDrivers();
- }
-
public SimpleJdbcConnectionProvider(@NonNull JdbcConnectionConfig
jdbcConfig) {
this.jdbcConfig = jdbcConfig;
}