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

Caideyipi pushed a commit to branch test/pipe-p0-it-master
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit fa53291abceed1abddfb652b738ffeb27ef349f4
Author: Caideyipi <[email protected]>
AuthorDate: Thu Oct 29 14:19:34 2026 +0800

    ci(pipe): add focused P0 recovery dispatch [skip ci]
---
 .github/workflows/pipe-it.yml | 78 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/.github/workflows/pipe-it.yml b/.github/workflows/pipe-it.yml
index 7b5d6df0b9e..f0ece1586f8 100644
--- a/.github/workflows/pipe-it.yml
+++ b/.github/workflows/pipe-it.yml
@@ -30,6 +30,11 @@ on:
       - "iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/**" 
#queryengine
   # allow manually run the action:
   workflow_dispatch:
+    inputs:
+      pipe_p0_only:
+        description: Run only the six Pipe P0 recovery integration tests
+        type: boolean
+        default: false
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
@@ -41,7 +46,74 @@ env:
   DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
 
 jobs:
+  pipe-p0:
+    if: github.event_name == 'workflow_dispatch' && inputs.pipe_p0_only
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    permissions:
+      contents: read
+    env:
+      MAVEN_OPTS: -Xmx2g -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false 
-Dmaven.wagon.http.retryHandler.class=standard 
-Dmaven.wagon.http.retryHandler.count=3
+    steps:
+      - uses: actions/checkout@v5
+      - name: Set up JDK 17
+        uses: actions/setup-java@v5
+        with:
+          distribution: corretto
+          java-version: '17'
+          cache: maven
+      - name: Run Pipe P0 recovery tests
+        shell: bash
+        run: |
+          mvn -B -ntp -T 2 clean verify \
+            -Pwith-integration-tests -PMultiClusterIT2DualTreeAutoEnhanced \
+            -pl integration-test -am \
+            -DskipUTs -Dtest=NoSuchSurefireTest \
+            -Dsurefire.failIfNoSpecifiedTests=false \
+            -Dit.test=IoTDBPipeRecoveryIT \
+            -DfailIfNoTests=false -Dfailsafe.failIfNoSpecifiedTests=false \
+            -DintegrationTest.clusterReadyRetryCount=90 \
+            -DintegrationTest.forkCount=1 \
+            -DConfigNodeMaxHeapSize=256 -DDataNodeMaxHeapSize=1024 \
+            -DDataNodeMaxDirectMemorySize=768 \
+            -DClusterConfigurations=HighPerformanceMode,HighPerformanceMode
+      - name: Verify all six tests ran successfully
+        if: always()
+        shell: bash
+        run: |
+          python3 - <<'PY'
+          from pathlib import Path
+          import xml.etree.ElementTree as ET
+
+          report = 
Path('integration-test/target/failsafe-reports/TEST-org.apache.iotdb.pipe.it.dual.treemodel.auto.enhanced.IoTDBPipeRecoveryIT.xml')
+          expected = {
+              
'testAllReceiverDataNodesDownRetainAndDrainBacklogWithoutNewWrites',
+              'testHistoryRealtimeHandoffSurvivesReceiverRestart',
+              'testMultipleDataRegionsAndWritersDrainAfterLeaderTransfer',
+              'testRequestNotDeliveredRetriesWithoutStarvingAnotherPipe',
+              'testCommittedWriteWithLostResponseRetriesIdempotently',
+              'testRuntimeQueueBackpressureDrainsAndReleasesMemory',
+          }
+          cases = list(ET.parse(report).getroot().iter('testcase'))
+          actual = {case.attrib['name'] for case in cases}
+          if len(cases) != 6 or actual != expected:
+              raise SystemExit(f'Expected all six P0 cases; got 
{sorted(actual)}')
+          for case in cases:
+              if any(child.tag in {'failure', 'error', 'skipped'} for child in 
case):
+                  raise SystemExit(f"P0 case did not pass: 
{case.attrib['name']}")
+          print('All six Pipe P0 recovery integration tests passed')
+          PY
+      - name: Upload Pipe P0 reports and cluster logs
+        if: always()
+        uses: actions/upload-artifact@v6
+        with:
+          name: pipe-p0-recovery-reports
+          path: |
+            integration-test/target/failsafe-reports
+            integration-test/target/cluster-logs
+          retention-days: 14
   single:
+    if: github.event_name != 'workflow_dispatch' || !inputs.pipe_p0_only
     strategy:
       fail-fast: false
       max-parallel: 15
@@ -131,6 +203,7 @@ jobs:
   # 12 IT classes split across 3 parallel shards to cut the historical ~42 min
   # wall clock to ~14 min. See cluster-it-1c1d.yml for the shard pattern.
   dual-tree-auto-basic:
+    if: github.event_name != 'workflow_dispatch' || !inputs.pipe_p0_only
     strategy:
       fail-fast: false
       max-parallel: 15
@@ -238,6 +311,7 @@ jobs:
   # 9 IT classes split across 3 parallel shards to cut the historical ~51 min
   # wall clock to ~17 min. See cluster-it-1c1d.yml for the shard pattern.
   dual-tree-auto-enhanced:
+    if: github.event_name != 'workflow_dispatch' || !inputs.pipe_p0_only
     strategy:
       fail-fast: false
       max-parallel: 15
@@ -346,6 +420,7 @@ jobs:
   # 11 IT classes split across 3 parallel shards to cut the historical ~27 min
   # wall clock to ~9 min. See cluster-it-1c1d.yml for the shard pattern.
   dual-tree-manual:
+    if: github.event_name != 'workflow_dispatch' || !inputs.pipe_p0_only
     strategy:
       fail-fast: false
       max-parallel: 15
@@ -452,6 +527,7 @@ jobs:
           path: integration-test/target/cluster-logs
           retention-days: 30
   dual-table-manual-basic:
+    if: github.event_name != 'workflow_dispatch' || !inputs.pipe_p0_only
     strategy:
       fail-fast: false
       max-parallel: 15
@@ -559,6 +635,7 @@ jobs:
   # 11 IT classes split across 3 parallel shards to cut the historical ~62 min
   # wall clock to ~22 min. See cluster-it-1c1d.yml for the shard pattern.
   dual-table-manual-enhanced:
+    if: github.event_name != 'workflow_dispatch' || !inputs.pipe_p0_only
     strategy:
       fail-fast: false
       max-parallel: 15
@@ -664,6 +741,7 @@ jobs:
           path: integration-test/target/cluster-logs
           retention-days: 30
   triple:
+    if: github.event_name != 'workflow_dispatch' || !inputs.pipe_p0_only
     strategy:
       fail-fast: false
       max-parallel: 1

Reply via email to