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

justinchen pushed a commit to branch fix-login
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/fix-login by this push:
     new 4b275c1ff94 Update pipe-it.yml
4b275c1ff94 is described below

commit 4b275c1ff940c0f806f3f58a0916684c16bb7c22
Author: Caideyipi <[email protected]>
AuthorDate: Mon Mar 23 10:37:40 2026 +0800

    Update pipe-it.yml
---
 .github/workflows/pipe-it.yml | 988 +++---------------------------------------
 1 file changed, 58 insertions(+), 930 deletions(-)

diff --git a/.github/workflows/pipe-it.yml b/.github/workflows/pipe-it.yml
index 0968e7739a0..1c1958ad1dc 100644
--- a/.github/workflows/pipe-it.yml
+++ b/.github/workflows/pipe-it.yml
@@ -1,31 +1,16 @@
-name: Multi-Cluster IT
+name: Pipe IT Debug (Single Test Loop)
 
 on:
   push:
     branches:
-      - master
-      - "rel/*"
-      - "rc/*"
-    paths-ignore:
-      - "docs/**"
-      - "site/**"
-      - "iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/**" 
#queryengine
+      - "**" # 只要有代码推送就跑,方便你在 PR 上触发
   pull_request:
     branches:
-      - master
-      - "rel/*"
-      - "rc/*"
-      - "force_ci/**"
-    paths-ignore:
-      - "docs/**"
-      - "site/**"
-      - "iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/**" 
#queryengine
-  # allow manually run the action:
-  workflow_dispatch:
+      - "**"
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
-  cancel-in-progress: true
+  cancel-in-progress: true # 如果有新的提交,取消旧的构建,节省资源
 
 env:
   MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false 
-Dmaven.wagon.http.retryHandler.class=standard 
-Dmaven.wagon.http.retryHandler.count=3
@@ -33,104 +18,18 @@ env:
   DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
 
 jobs:
-  single:
+  debug-specific-it:
+    name: Run IoTDBPipePermissionIT in Loop
+    runs-on: ubuntu-latest
     strategy:
       fail-fast: false
-      max-parallel: 15
       matrix:
         java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
         cluster1: [HighPerformanceMode]
         cluster2: [HighPerformanceMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
     steps:
       - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }} \
-              -pl integration-test \
-              -am -PMultiClusterIT1 \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
 
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-single-java${{ matrix.java }}-${{ runner.os }}-${{ 
matrix.cluster1 }}-${{ matrix.cluster2 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  dual-tree-auto-basic:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
-        cluster: [HighPerformanceMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
       - name: Set up JDK ${{ matrix.java }}
         uses: actions/setup-java@v5
         with:
@@ -138,841 +37,70 @@ jobs:
           java-version: ${{ matrix.java }}
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
 
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster }},${{ matrix.cluster 
}} \
-              -pl integration-test \
-              -am -PMultiClusterIT2DualTreeAutoBasic \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-dual-tree-auto-basic-java${{ matrix.java }}-${{ 
runner.os }}-${{ matrix.cluster }}-${{ matrix.cluster }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  dual-tree-auto-enhanced:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
-        cluster1: [HighPerformanceMode]
-        cluster2: [HighPerformanceMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: Cache Maven packages
         uses: actions/cache@v5
         with:
           path: ~/.m2
           key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
           restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }} \
-              -pl integration-test \
-              -am -PMultiClusterIT2DualTreeAutoEnhanced \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
 
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-dual-tree-auto-enhanced-java${{ matrix.java }}-${{ 
runner.os }}-${{ matrix.cluster1 }}-${{ matrix.cluster2 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  dual-tree-manual:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
-        cluster1: [HighPerformanceMode]
-        cluster2: [HighPerformanceMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }} \
-              -pl integration-test \
-              -am -PMultiClusterIT2DualTreeManual \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-dual-tree-manual-java${{ matrix.java }}-${{ 
runner.os }}-${{ matrix.cluster1 }}-${{ matrix.cluster2 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  subscription-tree-arch-verification:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
-        cluster1: [ScalableSingleNodeMode]
-        cluster2: [ScalableSingleNodeMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
+      - name: Run Test in Loop Until Failure
         shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
         run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
+          # 确保日志目录存在
+          mkdir -p integration-test/target/cluster-logs
+          
+          local -i attempt=1
+          
+          while true; do
+            echo "===================================================="
+            echo "Starting attempt #$attempt"
+            echo "===================================================="
+
+            # 注意:这里使用 mvn verify 或 test,重点是 -Dtest 参数
+            # 请根据你的项目模块结构调整 -pl 参数,如果 integration-test 是根模块则不需要 -pl
+            # 我保留了你原有的 -PMultiClusterIT2DualTreeManual Profile,请确认这是正确的 Profile
+          
+            mvn clean verify \
+              -P with-integration-tests,MultiClusterIT2DualTreeManual \
               -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
+              -Dtest=IoTDBPipePermissionIT#testIllegalPassword \
+              -DintegrationTest.forkCount=1 \
+              -DConfigNodeMaxHeapSize=256 \
+              -DDataNodeMaxHeapSize=1024 \
+              -DDataNodeMaxDirectMemorySize=768 \
               -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }} \
               -pl integration-test \
-              -am -PMultiClusterIT2SubscriptionTreeArchVerification \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-subscription-tree-arch-verification-java${{ 
matrix.java }}-${{ runner.os }}-${{ matrix.cluster1 }}-${{ matrix.cluster2 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  subscription-table-arch-verification:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
-        cluster1: [ScalableSingleNodeMode]
-        cluster2: [ScalableSingleNodeMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }} \
-              -pl integration-test \
-              -am -PMultiClusterIT2SubscriptionTableArchVerification \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-subscription-table-arch-verification-java${{ 
matrix.java }}-${{ runner.os }}-${{ matrix.cluster1 }}-${{ matrix.cluster2 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  subscription-tree-regression-consumer:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # do not use HighPerformanceMode here, otherwise some tests will cause 
the GH runner to receive a shutdown signal
-        cluster1: [ScalableSingleNodeMode]
-        cluster2: [ScalableSingleNodeMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }} \
-              -pl integration-test \
-              -am -PMultiClusterIT2SubscriptionTreeRegressionConsumer \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-subscription-tree-regression-consumer-java${{ 
matrix.java }}-${{ runner.os }}-${{ matrix.cluster1 }}-${{ matrix.cluster2 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  subscription-tree-regression-misc:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # do not use HighPerformanceMode here, otherwise some tests will cause 
the GH runner to receive a shutdown signal
-        cluster1: [ScalableSingleNodeMode]
-        cluster2: [ScalableSingleNodeMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }} \
-              -pl integration-test \
-              -am -PMultiClusterIT2SubscriptionTreeRegressionMisc \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-subscription-tree-regression-misc-java${{ 
matrix.java }}-${{ runner.os }}-${{ matrix.cluster1 }}-${{ matrix.cluster2 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  dual-table-manual-basic:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
-        cluster: [HighPerformanceMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster }},${{ matrix.cluster 
}} \
-              -pl integration-test \
-              -am -PMultiClusterIT2DualTableManualBasic \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-dual-table-manual-basic-java${{ matrix.java }}-${{ 
runner.os }}-${{ matrix.cluster }}-${{ matrix.cluster }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  dual-table-manual-enhanced:
-    strategy:
-      fail-fast: false
-      max-parallel: 15
-      matrix:
-        java: [17]
-        # StrongConsistencyClusterMode is ignored now because RatisConsensus 
has not been supported yet.
-        cluster: [HighPerformanceMode]
-        os: [ubuntu-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster }},${{ matrix.cluster 
}} \
-              -pl integration-test \
-              -am -PMultiClusterIT2DualTableManualEnhanced \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
-        if: failure()
-        uses: actions/upload-artifact@v6
-        with:
-          name: cluster-log-dual-table-manual-enhanced-java${{ matrix.java 
}}-${{ runner.os }}-${{ matrix.cluster }}-${{ matrix.cluster }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
-  triple:
-    strategy:
-      fail-fast: false
-      max-parallel: 1
-      matrix:
-        java: [ 17 ]
-        cluster1: [ ScalableSingleNodeMode ]
-        cluster2: [ ScalableSingleNodeMode ]
-        cluster3: [ ScalableSingleNodeMode ]
-        os: [ ubuntu-latest ]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout@v5
-      - name: Set up JDK ${{ matrix.java }}
-        uses: actions/setup-java@v5
-        with:
-          distribution: corretto
-          java-version: ${{ matrix.java }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: Cache Maven packages
-        uses: actions/cache@v5
-        with:
-          path: ~/.m2
-          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-m2-
-      - name: Sleep for a random duration between 0 and 10000 milliseconds
-        run: |
-          sleep  $(( $(( RANDOM % 10000 + 1 )) / 1000))
-      - name: IT Test
-        shell: bash
-        # we do not compile client-cpp for saving time, it is tested in 
client.yml
-        # we can skip influxdb-protocol because it has been tested separately 
in influxdb-protocol.yml
-        run: |
-          retry() {
-            local -i max_attempts=3
-            local -i attempt=1
-            local -i retry_sleep=5
-            local test_output
-
-            while [ $attempt -le $max_attempts ]; do
-              mvn clean verify \
-              -P with-integration-tests \
-              -DskipUTs \
-              -DintegrationTest.forkCount=1 -DConfigNodeMaxHeapSize=256 
-DDataNodeMaxHeapSize=1024 -DDataNodeMaxDirectMemorySize=768 \
-              -DClusterConfigurations=${{ matrix.cluster1 }},${{ 
matrix.cluster2 }},${{ matrix.cluster3 }} \
-              -pl integration-test \
-              -am -PMultiClusterIT3 \
-              -ntp >> ~/run-tests-$attempt.log && return 0
-              test_output=$(cat ~/run-tests-$attempt.log) 
-
-              echo "==================== BEGIN: ~/run-tests-$attempt.log 
===================="          
-              echo "$test_output"
-              echo "==================== END: ~/run-tests-$attempt.log 
======================"
-
-              if ! mv ~/run-tests-$attempt.log 
integration-test/target/cluster-logs/ 2>/dev/null; then
-                echo "Failed to move log file ~/run-tests-$attempt.log to 
integration-test/target/cluster-logs/. Skipping..."
-              fi
-
-              if echo "$test_output" | grep -q "Could not transfer artifact"; 
then
-                if [ $attempt -lt $max_attempts ]; then
-                  echo "Test failed with artifact transfer issue, attempt 
$attempt. Retrying in $retry_sleep seconds..."
-                  sleep $retry_sleep
-                  attempt=$((attempt + 1))
-                else
-                  echo "Test failed after $max_attempts attempts due to 
artifact transfer issue."
-                  echo "Treating this as a success because the issue is likely 
transient."
-                  return 0
-                fi
-              elif [ $? -ne 0 ]; then
-                echo "Test failed with a different error."
-                return 1
-              else
-                echo "Tests passed"
-                return 0
-              fi
-            done
-          }
-          retry
-      - name: Upload Artifact
+              -am \
+              -ntp
+
+            EXIT_CODE=$?
+
+            # 收集日志(每次跑完都把当前的日志存一下,防止 runner 被重置)
+            if [ -d "integration-test/target/cluster-logs" ]; then
+              # 简单的打包一下当前状态,防止文件被 clean 清空
+              tar -czf integration-test/target/last-run-logs-$attempt.tar.gz 
integration-test/target/cluster-logs || true
+            fi
+
+            if [ $EXIT_CODE -ne 0 ]; then
+              echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+              echo "FAIL: Test failed on attempt #$attempt"
+              echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+              exit 1
+            else
+              echo "PASS: Attempt #$attempt succeeded. Looping again 
immediately..."
+              attempt=$((attempt + 1))
+              # 如果你想让机器歇一会,可以在这加个 sleep 10
+            fi
+          done
+
+      - name: Upload Failure Logs
         if: failure()
         uses: actions/upload-artifact@v6
         with:
-          name: cluster-log-triple-java${{ matrix.java }}-${{ runner.os }}-${{ 
matrix.cluster1 }}-${{ matrix.cluster2 }}-${{ matrix.cluster3 }}
-          path: integration-test/target/cluster-logs
-          retention-days: 30
+          name: failure-logs-${{ matrix.cluster1 }}-${{ matrix.cluster2 }}
+          path: |
+            integration-test/target/cluster-logs
+            integration-test/target/last-run-logs-*.tar.gz
+          retention-days: 30
\ No newline at end of file


Reply via email to