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

JackieTien97 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 81cab405fd7 Shard Windows IT jobs to speed up 1C1D and Table 1C1D CI 
(#17692)
81cab405fd7 is described below

commit 81cab405fd79ce4c8e22586d55294c922c5f7e64
Author: Jackie Tien <[email protected]>
AuthorDate: Sun May 17 10:54:33 2026 +0800

    Shard Windows IT jobs to speed up 1C1D and Table 1C1D CI (#17692)
---
 .github/workflows/cluster-it-1c1d.yml       | 80 +++++++++++++++++++++++------
 .github/workflows/table-cluster-it-1c1d.yml | 80 +++++++++++++++++++++++------
 2 files changed, 130 insertions(+), 30 deletions(-)

diff --git a/.github/workflows/cluster-it-1c1d.yml 
b/.github/workflows/cluster-it-1c1d.yml
index 4ab201450e6..caf1de91c68 100644
--- a/.github/workflows/cluster-it-1c1d.yml
+++ b/.github/workflows/cluster-it-1c1d.yml
@@ -30,13 +30,52 @@ env:
   DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
 
 jobs:
-  Simple:
+  # Ubuntu runs all ITs in a single job (already fast at ~49 min)
+  Ubuntu:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v5
+      - name: Set up JDK
+        uses: actions/setup-java@v5
+        with:
+          distribution: corretto
+          java-version: 17
+        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: Adjust Linux kernel somaxconn
+        shell: bash
+        run: sudo sysctl -w net.core.somaxconn=65535
+      - name: IT/UT Test
+        shell: bash
+        run: |
+          mvn clean verify \
+          -P with-integration-tests \
+          -DskipUTs \
+          -DintegrationTest.forkCount=2 \
+          -pl integration-test \
+          -am
+      - name: Upload Artifact
+        if: failure()
+        uses: actions/upload-artifact@v6
+        with:
+          name: standalone-log-Linux
+          path: integration-test/target/cluster-logs
+          retention-days: 1
+
+  # Windows is ~77% slower than Ubuntu, so split into 3 shards to parallelize
+  Windows:
     strategy:
       fail-fast: false
-      max-parallel: 15
       matrix:
-        os: [ubuntu-latest, windows-latest]
-    runs-on: ${{ matrix.os }}
+        shard: [0, 1, 2]
+    runs-on: windows-latest
 
     steps:
       - uses: actions/checkout@v5
@@ -54,36 +93,47 @@ jobs:
           key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
           restore-keys: ${{ runner.os }}-m2-
       - name: Adjust network dynamic TCP ports range
-        if: ${{ runner.os == 'Windows' }}
         shell: pwsh
         run: |
           netsh int ipv4 set dynamicport tcp start=32768 num=32768
           netsh int ipv4 set dynamicport udp start=32768 num=32768
           netsh int ipv6 set dynamicport tcp start=32768 num=32768
           netsh int ipv6 set dynamicport udp start=32768 num=32768
-      - name: Adjust Linux kernel somaxconn
-        if: ${{ runner.os == 'Linux' }}
+      - name: Build IT shard list
         shell: bash
-        run: sudo sysctl -w net.core.somaxconn=65535
-      #      - name: Adjust Mac kernel somaxconn
-      #        if: ${{ runner.os == 'macOS' }}
-      #        shell: bash
-      #        run: sudo sysctl -w kern.ipc.somaxconn=65535
+        # Distribute LocalStandaloneIT test classes across 3 shards using 
hash-mod assignment.
+        # The list is written to a file so failsafe.includesFile can read it 
without command-line length limits.
+        run: |
+          set -euo pipefail
+          SHARD=${{ matrix.shard }}
+          TOTAL=3
+          # Write outside the repo so Apache RAT (license check) doesn't flag 
the file.
+          # Using a single grep -rl call instead of `find | xargs grep`: on 
Windows Git Bash,
+          # ARG_MAX is small so xargs batches the file list, and any batch 
with no matches
+          # makes grep exit 1, which makes xargs exit 123 and trips `set -o 
pipefail`.
+          grep -rlE --include='*IT.java' '\bLocalStandaloneIT\b' 
integration-test/src/test/java \
+            | awk -F'/' '{print $NF}' | sed 's/\.java$//' \
+            | sort \
+            | awk -v s=$SHARD -v t=$TOTAL 'NR%t==s' \
+            > "$RUNNER_TEMP/it-shard.txt"
+          echo "Shard $SHARD/$TOTAL contains $(wc -l < 
"$RUNNER_TEMP/it-shard.txt") test classes"
+          head -5 "$RUNNER_TEMP/it-shard.txt"
       - name: IT/UT 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: |
           mvn clean verify \
           -P with-integration-tests \
           -DskipUTs \
           -DintegrationTest.forkCount=2 \
+          -Dfailsafe.includesFile="$RUNNER_TEMP/it-shard.txt" \
+          -DfailIfNoTests=false \
+          -Dfailsafe.failIfNoSpecifiedTests=false \
           -pl integration-test \
           -am
       - name: Upload Artifact
         if: failure()
         uses: actions/upload-artifact@v6
         with:
-          name: standalone-log-java${{ matrix.java }}-${{ runner.os }}
+          name: standalone-log-Windows-shard${{ matrix.shard }}
           path: integration-test/target/cluster-logs
           retention-days: 1
diff --git a/.github/workflows/table-cluster-it-1c1d.yml 
b/.github/workflows/table-cluster-it-1c1d.yml
index 782bafa4ddb..a0058fe3219 100644
--- a/.github/workflows/table-cluster-it-1c1d.yml
+++ b/.github/workflows/table-cluster-it-1c1d.yml
@@ -31,13 +31,52 @@ env:
   DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
 
 jobs:
-  Simple:
+  # Ubuntu runs all ITs in a single job (already fast at ~39 min)
+  Ubuntu:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v5
+      - name: Set up JDK
+        uses: actions/setup-java@v5
+        with:
+          distribution: corretto
+          java-version: 17
+        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: Adjust Linux kernel somaxconn
+        shell: bash
+        run: sudo sysctl -w net.core.somaxconn=65535
+      - name: IT/UT Test
+        shell: bash
+        run: |
+          mvn clean verify \
+          -P with-integration-tests \
+          -DskipUTs \
+          -DintegrationTest.forkCount=2 -DDataNodeMaxHeapSize=1024 \
+          -pl integration-test \
+          -am -PTableSimpleIT
+      - name: Upload Artifact
+        if: failure()
+        uses: actions/upload-artifact@v6
+        with:
+          name: table-standalone-log-Linux
+          path: integration-test/target/cluster-logs
+          retention-days: 1
+
+  # Windows is ~67% slower than Ubuntu, so split into 3 shards to parallelize
+  Windows:
     strategy:
       fail-fast: false
-      max-parallel: 15
       matrix:
-        os: [ubuntu-latest, windows-latest]
-    runs-on: ${{ matrix.os }}
+        shard: [0, 1, 2]
+    runs-on: windows-latest
 
     steps:
       - uses: actions/checkout@v5
@@ -55,36 +94,47 @@ jobs:
           key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
           restore-keys: ${{ runner.os }}-m2-
       - name: Adjust network dynamic TCP ports range
-        if: ${{ runner.os == 'Windows' }}
         shell: pwsh
         run: |
           netsh int ipv4 set dynamicport tcp start=32768 num=32768
           netsh int ipv4 set dynamicport udp start=32768 num=32768
           netsh int ipv6 set dynamicport tcp start=32768 num=32768
           netsh int ipv6 set dynamicport udp start=32768 num=32768
-      - name: Adjust Linux kernel somaxconn
-        if: ${{ runner.os == 'Linux' }}
+      - name: Build IT shard list
         shell: bash
-        run: sudo sysctl -w net.core.somaxconn=65535
-      #      - name: Adjust Mac kernel somaxconn
-      #        if: ${{ runner.os == 'macOS' }}
-      #        shell: bash
-      #        run: sudo sysctl -w kern.ipc.somaxconn=65535
+        # Distribute TableLocalStandaloneIT test classes across 3 shards using 
hash-mod assignment.
+        # The list is written to a file so failsafe.includesFile can read it 
without command-line length limits.
+        run: |
+          set -euo pipefail
+          SHARD=${{ matrix.shard }}
+          TOTAL=3
+          # Write outside the repo so Apache RAT (license check) doesn't flag 
the file.
+          # Using a single grep -rl call instead of `find | xargs grep`: on 
Windows Git Bash,
+          # ARG_MAX is small so xargs batches the file list, and any batch 
with no matches
+          # makes grep exit 1, which makes xargs exit 123 and trips `set -o 
pipefail`.
+          grep -rl --include='*IT.java' 'TableLocalStandaloneIT' 
integration-test/src/test/java \
+            | awk -F'/' '{print $NF}' | sed 's/\.java$//' \
+            | sort \
+            | awk -v s=$SHARD -v t=$TOTAL 'NR%t==s' \
+            > "$RUNNER_TEMP/it-shard.txt"
+          echo "Shard $SHARD/$TOTAL contains $(wc -l < 
"$RUNNER_TEMP/it-shard.txt") test classes"
+          head -5 "$RUNNER_TEMP/it-shard.txt"
       - name: IT/UT 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: |
           mvn clean verify \
           -P with-integration-tests \
           -DskipUTs \
           -DintegrationTest.forkCount=2 -DDataNodeMaxHeapSize=1024 \
+          -Dfailsafe.includesFile="$RUNNER_TEMP/it-shard.txt" \
+          -DfailIfNoTests=false \
+          -Dfailsafe.failIfNoSpecifiedTests=false \
           -pl integration-test \
           -am -PTableSimpleIT
       - name: Upload Artifact
         if: failure()
         uses: actions/upload-artifact@v6
         with:
-          name: table-standalone-log-java${{ matrix.java }}-${{ runner.os }}
+          name: table-standalone-log-Windows-shard${{ matrix.shard }}
           path: integration-test/target/cluster-logs
           retention-days: 1

Reply via email to