Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .github/workflows/intermittent-test-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ env:
RATIS_REPO: ${{ github.event.inputs.ratis-repo }}
RATIS_VERSION: ${{ github.event.inputs.ratis-ref }}
JAVA_VERSION: ${{ github.event.inputs.java-version }}
# Surefire 3.0.0-M4 is used because newer versions do not reliably kill the fork on timeout
# SUREFIRE-1722, SUREFIRE-1815
SUREFIRE_VERSION: 3.0.0-M4
run-name: ${{ github.event_name == 'workflow_dispatch' && format('{0}#{1}[{2}]-{3}x{4}-java{5}', inputs.test-class, inputs.test-name, inputs.ref, inputs.splits, inputs.iterations, inputs.java-version) || '' }}
jobs:
prepare-job:
Expand All @@ -87,11 +90,54 @@ jobs:
with:
repo: ${{ github.event.inputs.ratis-repo || format('{0}/ratis', github.repository_owner) }}
ref: ${{ github.event.inputs.ratis-ref }}
find-tests:
if: ${{ always() }}
needs:
- prepare-job
runs-on: ubuntu-24.04
outputs:
modules: ${{ steps.modules.outputs.modules }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.ref }}
- name: Cache for maven dependencies
uses: actions/cache/restore@v4
with:
path: |
~/.m2/repository/*/*/*
!~/.m2/repository/org/apache/ozone
key: maven-repo-${{ hashFiles('**/pom.xml') }}
restore-keys: |
maven-repo-
- name: Setup java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 8
- name: Find tests
run: |
# find tests to be run in splits by running them with very short timeout
hadoop-ozone/dev-support/checks/junit.sh -DexcludedGroups="native|slow|unhealthy" -DskipShade \
-Dtest="$TEST_CLASS,Abstract*Test*\$*" \
-Dsurefire.fork.timeout=1 -Dmaven-surefire-plugin.version=${{ env.SUREFIRE_VERSION }} \
|| true # ignore errors
env:
ITERATIONS: 1
- name: Find modules
id: modules
run: |
grep -e 'surefire:${{ env.SUREFIRE_VERSION }}:test' -e 'Running org.apache' target/unit/output.log | grep -B1 'Running org.apache'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is target/unit/output.log populated even before the test run?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Find tests actually executes the tests once, with timeout=1s. I didn't find any other way to reliably find which tests Surefire/JUnit would run.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah I checked too but couldn't find better. Even if it is not able to write within 1 sec due to any issue, it will fallback to building all modules which is what happens today so I guess it should be okay.

modules=$(grep -e 'surefire:${{ env.SUREFIRE_VERSION }}:test' -e 'Running org.apache' target/unit/output.log | grep -B1 'Running org.apache' \
| grep surefire | cut -f2 -d'@' | awk '{ print $1 }' | sed 's/^/:/' | xargs | sed -e 's/ /,/g')
echo "modules=$modules" >> $GITHUB_OUTPUT
if: ${{ !cancelled() }}
build:
if: ${{ always() }}
needs:
- prepare-job
- ratis
- find-tests
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
Expand Down Expand Up @@ -129,6 +175,10 @@ jobs:
args="$args -Dgrpc.protobuf-compile.version=${{ needs.ratis.outputs.protobuf-version }}"
fi

if [[ -n "${{ needs.find-tests.outputs.modules }}" ]]; then
args="$args -am -pl ${{ needs.find-tests.outputs.modules }}"
fi

hadoop-ozone/dev-support/checks/build.sh $args
- name: Store Maven repo for tests
uses: actions/upload-artifact@v4
Expand All @@ -143,6 +193,7 @@ jobs:
- prepare-job
- ratis
- build
- find-tests
name: Run-Split
runs-on: ubuntu-24.04
strategy:
Expand Down Expand Up @@ -197,6 +248,10 @@ jobs:
args="$args -Dgrpc.protobuf-compile.version=${{ needs.ratis.outputs.protobuf-version }}"
fi

if [[ -n "${{ needs.find-tests.outputs.modules }}" ]]; then
args="$args -pl ${{ needs.find-tests.outputs.modules }}"
fi

if [ "$TEST_METHOD" = "ALL" ]; then
echo "Running all tests from $TEST_CLASS"
set -x
Expand Down