You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by yo...@apache.org on 2025/08/22 09:54:14 UTC
(iotdb) 01/01: update region migration cli env & trigger CI
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 <53...@qq.com>
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);