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

yongzao pushed a commit to branch ban-region-daily-it
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 6ef83e04acf2b6e486f70f9c1324a2fee8873582
Author: Yongzao <[email protected]>
AuthorDate: Fri Aug 22 17:54:02 2025 +0800

    update region migration cli env & trigger CI
---
 .github/workflows/daily-it.yml                     | 22 +++++++++++--
 .../iotdb/it/env/cluster/env/AbstractEnv.java      | 37 ++++++++++++++++------
 .../iotdb/it/env/remote/env/RemoteServerEnv.java   |  6 ++++
 .../java/org/apache/iotdb/itbase/env/BaseEnv.java  | 13 ++++++++
 ...IoTDBRegionOperationReliabilityITFramework.java |  2 +-
 5 files changed, 67 insertions(+), 13 deletions(-)

diff --git a/.github/workflows/daily-it.yml b/.github/workflows/daily-it.yml
index c49ef772905..8d7af9a1544 100644
--- a/.github/workflows/daily-it.yml
+++ b/.github/workflows/daily-it.yml
@@ -1,9 +1,25 @@
 name: Daily IT
 
 on:
-  schedule:
-    # Run at UTC 19:00 every day (CST 03:00 AM)
-    - cron: '0 19 * * *'
+  push:
+    branches:
+      - master
+      - 'rel/*'
+      - 'rc/*'
+    paths-ignore:
+      - 'docs/**'
+      - 'site/**'
+  pull_request:
+    branches:
+      - master
+      - 'rel/*'
+      - 'rc/*'
+      - 'force_ci/**'
+    paths-ignore:
+      - 'docs/**'
+      - 'site/**'
+  # allow manually run the action:
+  workflow_dispatch:
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
diff --git 
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
 
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
index 5cb7f2cd587..c207ca8ac4c 100644
--- 
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
+++ 
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
@@ -620,6 +620,14 @@ public abstract class AbstractEnv implements BaseEnv {
         getReadConnections(null, username, password, sqlDialect));
   }
 
+  @Override
+  public Connection getAvailableConnection(String username, String password, 
String sqlDialect)
+      throws SQLException {
+    return new ClusterTestConnection(
+        getWriteConnection(null, username, password, sqlDialect),
+        getOneAvailableReadConnection(null, username, password, sqlDialect));
+  }
+
   @Override
   public Connection getConnection(
       final DataNodeWrapper dataNodeWrapper,
@@ -820,15 +828,6 @@ public abstract class AbstractEnv implements BaseEnv {
   protected NodeConnection getWriteConnection(
       Constant.Version version, String username, String password, String 
sqlDialect)
       throws SQLException {
-    DataNodeWrapper dataNode;
-
-    if (System.getProperty("RandomSelectWriteNode", 
"true").equalsIgnoreCase("true")) {
-      // Randomly choose a node for handling write requests
-      dataNode = 
this.dataNodeWrapperList.get(rand.nextInt(this.dataNodeWrapperList.size()));
-    } else {
-      dataNode = this.dataNodeWrapperList.get(0);
-    }
-
     return getWriteConnectionFromDataNodeList(
         this.dataNodeWrapperList, version, username, password, sqlDialect);
   }
@@ -908,6 +907,26 @@ public abstract class AbstractEnv implements BaseEnv {
     return readConnRequestDelegate.requestAll();
   }
 
+  protected List<NodeConnection> getOneAvailableReadConnection(
+      final Constant.Version version,
+      final String username,
+      final String password,
+      final String sqlDialect)
+      throws SQLException {
+    final List<DataNodeWrapper> dataNodeWrapperListCopy = new 
ArrayList<>(dataNodeWrapperList);
+    Collections.shuffle(dataNodeWrapperListCopy);
+    SQLException lastException = null;
+    for (final DataNodeWrapper dataNode : dataNodeWrapperListCopy) {
+      try {
+        return getReadConnections(version, dataNode, username, password, 
sqlDialect);
+      } catch (final SQLException e) {
+        lastException = e;
+      }
+    }
+    logger.error("Failed to get connection from any DataNode, last exception 
is ", lastException);
+    throw lastException;
+  }
+
   protected List<NodeConnection> getReadConnections(
       final Constant.Version version,
       final DataNodeWrapper dataNode,
diff --git 
a/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
 
b/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
index 0cede5cf9d8..586eff60494 100644
--- 
a/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
+++ 
b/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
@@ -142,6 +142,12 @@ public class RemoteServerEnv implements BaseEnv {
     return connection;
   }
 
+  @Override
+  public Connection getAvailableConnection(String username, String password, 
String sqlDialect)
+      throws SQLException {
+    throw new UnsupportedOperationException();
+  }
+
   @Override
   public Connection getWriteOnlyConnectionWithSpecifiedDataNode(
       DataNodeWrapper dataNode, String username, String password, String 
sqlDialect) {
diff --git 
a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java 
b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
index 19dcc77dfde..8b32deb3ea8 100644
--- a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
+++ b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
@@ -117,11 +117,21 @@ public interface BaseEnv {
         SessionConfig.DEFAULT_USER, SessionConfig.DEFAULT_PASSWORD, 
TREE_SQL_DIALECT);
   }
 
+  default Connection getAvailableConnection() throws SQLException {
+    return getAvailableConnection(
+        SessionConfig.DEFAULT_USER, SessionConfig.DEFAULT_PASSWORD, 
TREE_SQL_DIALECT);
+  }
+
   default Connection getTableConnection() throws SQLException {
     return getConnection(
         SessionConfig.DEFAULT_USER, SessionConfig.DEFAULT_PASSWORD, 
TABLE_SQL_DIALECT);
   }
 
+  default Connection getAvailableTableConnection() throws SQLException {
+    return getAvailableConnection(
+        SessionConfig.DEFAULT_USER, SessionConfig.DEFAULT_PASSWORD, 
TABLE_SQL_DIALECT);
+  }
+
   default Connection getConnection(String sqlDialect) throws SQLException {
     return getConnection(SessionConfig.DEFAULT_USER, 
SessionConfig.DEFAULT_PASSWORD, sqlDialect);
   }
@@ -156,6 +166,9 @@ public interface BaseEnv {
 
   Connection getConnection(String username, String password, String 
sqlDialect) throws SQLException;
 
+  Connection getAvailableConnection(String username, String password, String 
sqlDialect)
+      throws SQLException;
+
   default Connection 
getWriteOnlyConnectionWithSpecifiedDataNode(DataNodeWrapper dataNode)
       throws SQLException {
     return getWriteOnlyConnectionWithSpecifiedDataNode(
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/IoTDBRegionOperationReliabilityITFramework.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/IoTDBRegionOperationReliabilityITFramework.java
index 25436bb103e..3769dd0e389 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/IoTDBRegionOperationReliabilityITFramework.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/IoTDBRegionOperationReliabilityITFramework.java
@@ -653,7 +653,7 @@ public class IoTDBRegionOperationReliabilityITFramework {
   }
 
   private void checkClusterStillWritable() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
+    try (Connection connection = EnvFactory.getEnv().getAvailableConnection();
         Statement statement = connection.createStatement()) {
       // check old data
       ResultSet resultSet = statement.executeQuery(COUNT_TIMESERIES);

Reply via email to