This is an automated email from the ASF dual-hosted git repository.

zhouyao2023 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 b7a0fc5e43 [Fix][E2E] Fix flaky CI failure in 
`KingbaseDialectContainerTest` (#10674)
b7a0fc5e43 is described below

commit b7a0fc5e433a0caaf700668ee2c4ff4c04a3a3cf
Author: Doyeon Kim <[email protected]>
AuthorDate: Thu Apr 2 11:43:40 2026 +0900

    [Fix][E2E] Fix flaky CI failure in `KingbaseDialectContainerTest` (#10674)
---
 .../container/AbstractKingbaseContainerTest.java   | 49 +++++++++++++----
 .../container/KingbaseCatalogContainerTest.java    |  2 +-
 .../container/KingbaseDialectContainerTest.java    | 64 +++++++++++-----------
 3 files changed, 70 insertions(+), 45 deletions(-)

diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/AbstractKingbaseContainerTest.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/AbstractKingbaseContainerTest.java
index c4be8aa731..b9a96f97b8 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/AbstractKingbaseContainerTest.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/AbstractKingbaseContainerTest.java
@@ -23,6 +23,7 @@ import 
org.apache.seatunnel.connectors.seatunnel.jdbc.catalog.kingbase.KingbaseC
 
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
 import org.testcontainers.containers.GenericContainer;
@@ -44,6 +45,7 @@ import java.time.Duration;
  * errors, please replace the image with a newly built one that contains a 
valid license.
  */
 @DisabledOnOs(OS.WINDOWS)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public abstract class AbstractKingbaseContainerTest {
 
     protected static final String KINGBASE_IMAGE = 
"liangyaobo/kingbase:v8r6-license";
@@ -53,12 +55,12 @@ public abstract class AbstractKingbaseContainerTest {
     protected static final String SCHEMA = "public";
     protected static final int KINGBASE_PORT = 54321;
 
-    protected static GenericContainer<?> kingbaseContainer;
-    protected static Connection connection;
-    protected static KingbaseCatalog catalog;
+    protected GenericContainer<?> kingbaseContainer;
+    protected String jdbcUrl;
+    protected KingbaseCatalog catalog;
 
     @BeforeAll
-    public static void startContainer() throws SQLException {
+    public void startContainer() throws SQLException {
         DockerImageName imageName = DockerImageName.parse(KINGBASE_IMAGE);
 
         kingbaseContainer =
@@ -73,9 +75,9 @@ public abstract class AbstractKingbaseContainerTest {
 
         String host = kingbaseContainer.getHost();
         Integer mappedPort = kingbaseContainer.getMappedPort(KINGBASE_PORT);
-        String jdbcUrl = String.format("jdbc:kingbase8://%s:%d/%s", host, 
mappedPort, DATABASE);
+        jdbcUrl = String.format("jdbc:kingbase8://%s:%d/%s", host, mappedPort, 
DATABASE);
 
-        connection = connectWithRetry(jdbcUrl, USERNAME, PASSWORD);
+        waitUntilSqlReady();
 
         catalog =
                 new KingbaseCatalog(
@@ -89,24 +91,49 @@ public abstract class AbstractKingbaseContainerTest {
     }
 
     @AfterAll
-    public static void stopContainer() throws SQLException {
+    public void stopContainer() {
         if (catalog != null) {
             catalog.close();
         }
-        if (connection != null && !connection.isClosed()) {
-            connection.close();
-        }
         if (kingbaseContainer != null) {
             kingbaseContainer.stop();
         }
     }
 
     protected void executeSql(String sql) throws SQLException {
-        try (Statement stmt = connection.createStatement()) {
+        try (Connection connection = getConnection();
+                Statement stmt = connection.createStatement()) {
             stmt.execute(sql);
         }
     }
 
+    protected Connection getConnection() throws SQLException {
+        return connectWithRetry(jdbcUrl, USERNAME, PASSWORD);
+    }
+
+    private void waitUntilSqlReady() throws SQLException {
+        RetryUtils.RetryMaterial retryMaterial =
+                new RetryUtils.RetryMaterial(30, true, exception -> true, 
2000);
+
+        try {
+            RetryUtils.retryWithException(
+                    () -> {
+                        try (Connection connection =
+                                        DriverManager.getConnection(jdbcUrl, 
USERNAME, PASSWORD);
+                                Statement stmt = connection.createStatement()) 
{
+                            stmt.execute("SELECT 1");
+                        }
+                        return null;
+                    },
+                    retryMaterial);
+        } catch (Exception e) {
+            if (e instanceof SQLException) {
+                throw (SQLException) e;
+            }
+            throw new SQLException("Kingbase is not ready to execute SQL", e);
+        }
+    }
+
     private static Connection connectWithRetry(String jdbcUrl, String 
username, String password)
             throws SQLException {
         RetryUtils.RetryMaterial retryMaterial =
diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseCatalogContainerTest.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseCatalogContainerTest.java
index 936ddc42f4..7de73e6290 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseCatalogContainerTest.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseCatalogContainerTest.java
@@ -95,7 +95,7 @@ public class KingbaseCatalogContainerTest extends 
AbstractKingbaseContainerTest
     }
 
     @Test
-    public void testCreateTableViaAPI() throws SQLException {
+    public void testCreateTableViaAPI() {
         String testTableName = "test_api_create_table";
         TablePath tablePath = TablePath.of(DATABASE, SCHEMA, testTableName);
 
diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseDialectContainerTest.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseDialectContainerTest.java
index 29cec63763..c195d9d353 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseDialectContainerTest.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/container/KingbaseDialectContainerTest.java
@@ -28,6 +28,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -41,36 +42,37 @@ import java.util.Optional;
 @DisabledOnOs(OS.WINDOWS)
 public class KingbaseDialectContainerTest extends 
AbstractKingbaseContainerTest {
 
-    private static KingbaseDialect dialect;
     private static final String TEST_TABLE = "dialect_test_table";
+    private KingbaseDialect dialect;
 
     @BeforeAll
-    public static void setupDialect() throws SQLException {
+    public void setupDialect() throws SQLException {
         dialect = new KingbaseDialect();
 
-        String createTableSql =
-                String.format(
-                        "CREATE TABLE %s.%s ("
-                                + "id INT8 PRIMARY KEY, "
-                                + "name VARCHAR(100), "
-                                + "value NUMERIC(10,2), "
-                                + "created_at TIMESTAMP"
-                                + ")",
-                        quoteIdentifier(SCHEMA), quoteIdentifier(TEST_TABLE));
+        String qualifiedTable =
+                String.format("%s.%s", quoteIdentifier(SCHEMA), 
quoteIdentifier(TEST_TABLE));
 
-        try (Statement stmt = connection.createStatement()) {
-            stmt.execute(createTableSql);
-        }
+        String createTableSql =
+                "CREATE TABLE IF NOT EXISTS "
+                        + qualifiedTable
+                        + " ("
+                        + "id BIGINT PRIMARY KEY, "
+                        + "name VARCHAR(100), "
+                        + "value NUMERIC(10,2), "
+                        + "created_at TIMESTAMP"
+                        + ")";
+        executeSql(createTableSql);
+
+        String truncateSql = "TRUNCATE TABLE " + qualifiedTable;
+        executeSql(truncateSql);
 
         // Insert test data
         String insertSql =
-                String.format(
-                        "INSERT INTO %s.%s (id, name, value, created_at) "
-                                + "VALUES (1, 'test1', 100.50, 
CURRENT_TIMESTAMP)",
-                        quoteIdentifier(SCHEMA), quoteIdentifier(TEST_TABLE));
-        try (Statement stmt = connection.createStatement()) {
-            stmt.execute(insertSql);
-        }
+                "INSERT INTO "
+                        + qualifiedTable
+                        + " (id, name, value, created_at) "
+                        + "VALUES (1, 'test1', 100.50, CURRENT_TIMESTAMP)";
+        executeSql(insertSql);
     }
 
     @Test
@@ -221,7 +223,8 @@ public class KingbaseDialectContainerTest extends 
AbstractKingbaseContainerTest
             executeSql(insertSql);
 
             // Verify insert
-            try (Statement stmt = connection.createStatement();
+            try (Connection connection = getConnection();
+                    Statement stmt = connection.createStatement();
                     ResultSet rs =
                             stmt.executeQuery(
                                     String.format(
@@ -290,20 +293,15 @@ public class KingbaseDialectContainerTest extends 
AbstractKingbaseContainerTest
 
     @Test
     public void testCreatPreparedStatement() throws SQLException {
-        PreparedStatement ps = null;
-        try {
-            String sql =
-                    String.format(
-                            "SELECT * FROM %s.%s",
-                            quoteIdentifier(SCHEMA), 
quoteIdentifier(TEST_TABLE));
-            ps = dialect.creatPreparedStatement(connection, sql, 100);
+        String sql =
+                String.format(
+                        "SELECT * FROM %s.%s",
+                        quoteIdentifier(SCHEMA), quoteIdentifier(TEST_TABLE));
 
+        try (Connection connection = getConnection();
+                PreparedStatement ps = 
dialect.creatPreparedStatement(connection, sql, 100)) {
             Assertions.assertNotNull(ps);
             Assertions.assertEquals(100, ps.getFetchSize());
-        } finally {
-            if (ps != null) {
-                ps.close();
-            }
         }
     }
 

Reply via email to