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;
     }

Reply via email to