From 79a74d001f795c3dffb50da6539d2d3f7cc97fb6 Mon Sep 17 00:00:00 2001 From: Sai Boorlagadda Date: Sat, 17 Jan 2026 05:59:16 -0800 Subject: [PATCH 1/5] GEODE-10550: Enable GitHub Actions workflows for support/1.15 branch Add GitHub Actions workflow files to support/1.15 branch to enable automated CI/CD checks for pull requests targeting this branch. This change adds two workflow files: - .github/workflows/codeql.yml: CodeQL security scanning - .github/workflows/gradle.yml: Build, test, and code quality checks The workflows will run on: - Push events to support/1.15 branch - Pull requests targeting support/1.15 branch - Scheduled weekly security scans (CodeQL only) This ensures that dependency updates and security fixes submitted to the support/1.15 branch are properly validated before merge. --- .github/workflows/codeql.yml | 99 ++++++++ .github/workflows/gradle.yml | 460 +++++++++++++++++++++++++++++++++++ 2 files changed, 559 insertions(+) create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/gradle.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 000000000000..b1e639aabac9 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,99 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ support/1.15 ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ support/1.15 ] + schedule: + - cron: '22 22 * * 2' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'go', 'java', 'javascript', 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Java JDK + uses: actions/setup-java@v4.7.1 + with: + java-version: 17 + distribution: temurin + cache: gradle + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + if: matrix.language != 'java' + # â„šī¸ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + - run: ./gradlew dev installDist --no-daemon --no-build-cache + if: matrix.language == 'java' + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 000000000000..8fd8a2b9772c --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,460 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: develop + +on: + push: + branches: [ "support/1.15" ] + pull_request: + branches: [ "support/1.15" ] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'liberica' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run 'build install javadoc spotlessCheck rat checkPom resolveDependencies pmdMain' with Gradle + run: ./gradlew --console=plain --no-daemon build install javadoc spotlessCheck rat checkPom resolveDependencies pmdMain -x test + + apiCheck: + needs: build + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + distribution: [ 'liberica' ] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: | + 17 + - name: Set JAVA_TEST_PATH to 17 + run: | + echo "JAVA_TEST_PATH=${JAVA_HOME_17_X64}" >> $GITHUB_ENV + if: matrix.java == '17' + - name: Java API Check + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 # Use jdk 17 for build + JAVA_TEST_VERSION=${{ matrix.java }} + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + japicmp --console=plain --no-daemon + + unitTest: + needs: build + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + distribution: ['liberica'] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK (include all 3 JDKs in env) + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: | + 17 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Set JAVA_TEST_PATH to 17 + run: | + echo "JAVA_TEST_PATH=${JAVA_HOME_17_X64}" >> $GITHUB_ENV + if: matrix.java == '17' + - name: Run unit tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 # Use jdk 17 for build + JAVA_TEST_VERSION=${{ matrix.java }} + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --parallel \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + test --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: unit-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 + + integrationTest: + needs: [apiCheck, unitTest] + strategy: + matrix: + os: [ubuntu-latest] + distribution: ['liberica'] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: | + 17 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run integration tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 + JAVA_TEST_VERSION=${{ matrix.java }} + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --parallel \ + -PparallelDunit \ + --max-workers=12 \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + integrationTest --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: integration-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 + + acceptanceTest: + needs: [apiCheck, unitTest] + strategy: + matrix: + os: [ubuntu-latest] + distribution: ['liberica'] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: ${{ matrix.java }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run acceptance tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 + JAVA_TEST_VERSION=17 + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --no-parallel \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + acceptanceTest --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: acceptance-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 + + wanDistributedTestCore: + needs: [apiCheck, unitTest] + strategy: + matrix: + os: [ubuntu-latest] + distribution: ['liberica'] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: ${{ matrix.java }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run wan distributed tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 + JAVA_TEST_VERSION=17 + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --parallel \ + -PparallelDunit \ + --max-workers=6 \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + geode-wan:distributedTest --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: wan-distributed-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 + + cqDistributedTestCore: + needs: [apiCheck, unitTest] + strategy: + matrix: + os: [ubuntu-latest] + distribution: ['liberica'] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: ${{ matrix.java }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run cq distributed tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 + JAVA_TEST_VERSION=17 + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --parallel -PparallelDunit --max-workers=6 \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + geode-cq:distributedTest --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: cq-distributed-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 + + luceneDistributedTestCore: + needs: [apiCheck, unitTest] + strategy: + matrix: + os: [ubuntu-latest] + distribution: ['liberica'] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: ${{ matrix.java }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run lucene distributed tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 + JAVA_TEST_VERSION=17 + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --parallel \ + -PparallelDunit \ + --max-workers=6 \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + geode-lucene:distributedTest --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: lucene-distributed-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 + + mgmtDistributedTestCore: + needs: [apiCheck, unitTest] + strategy: + matrix: + os: [ubuntu-latest] + distribution: ['liberica'] + java: ['17'] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: ${{ matrix.java }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run gfsh, web-mgmt, web distributed tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 + JAVA_TEST_VERSION=17 + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --no-parallel \ + --max-workers=6 \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + geode-gfsh:distributedTest \ + geode-web:distributedTest \ + geode-web-management:distributedTest --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: mgmt-distributed-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 + + + assemblyDistributedTestCore: + needs: [ apiCheck, unitTest ] + strategy: + matrix: + os: [ ubuntu-latest ] + distribution: [ 'liberica' ] + java: [ '17' ] + runs-on: ${{ matrix.os }} + env: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + steps: + - uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distribution }} + java-version: ${{ matrix.java }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: wrapper + - name: Run assembly, connectors, old-client, extensions distributed tests + run: | + GRADLE_JVM_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_PATH=${JAVA_HOME_17_X64} + JAVA_BUILD_VERSION=17 + JAVA_TEST_VERSION=17 + cp gradlew gradlewStrict + sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict + GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ + --no-parallel \ + --max-workers=6 \ + -PcompileJVM=${JAVA_BUILD_PATH} \ + -PcompileJVMVer=${JAVA_BUILD_VERSION} \ + -PtestJVM=${JAVA_TEST_PATH} \ + -PtestJVMVer=${JAVA_TEST_VERSION} \ + -PtestJava17Home=${JAVA_HOME_17_X64} \ + geode-assembly:distributedTest \ + geode-dunit:distributedTest \ + geode-connectors:distributedTest \ + geode-old-client:distributedTest \ + extensions:geode-modules:distributedTest \ + extensions:geode-modules-tomcat10:distributedTest --console=plain --no-daemon + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: assembly-distributed-test-reports-${{ matrix.os }}-${{ matrix.java }} + path: build/reports + retention-days: 5 From 9f776b9b4881a59dc7662c97f793c77ad020af8f Mon Sep 17 00:00:00 2001 From: Sai Boorlagadda Date: Sat, 17 Jan 2026 06:06:34 -0800 Subject: [PATCH 2/5] Fix Java version to JDK 8 for support/1.15 branch The support/1.15 branch uses Gradle 6.8.3 and is configured for Java 8. Updated all workflow jobs to use JDK 8 instead of JDK 17 to match the branch requirements. Changes: - Updated all jobs to use java-version: '8' - Changed JAVA_HOME references from JAVA_HOME_17_X64 to JAVA_HOME_8_X64 - Updated testJava*Home parameters to use testJava8Home - Set JAVA_BUILD_VERSION and JAVA_TEST_VERSION to 8 --- .github/workflows/codeql.yml | 2 +- .github/workflows/gradle.yml | 140 +++++++++++++++++------------------ 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b1e639aabac9..1a68a03c532e 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -62,7 +62,7 @@ jobs: - name: Setup Java JDK uses: actions/setup-java@v4.7.1 with: - java-version: 17 + java-version: 8 distribution: temurin cache: gradle diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 8fd8a2b9772c..04d139437dd4 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -33,10 +33,10 @@ jobs: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 8 uses: actions/setup-java@v3 with: - java-version: '17' + java-version: '8' distribution: 'liberica' - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 @@ -52,7 +52,7 @@ jobs: matrix: os: [ubuntu-latest] distribution: [ 'liberica' ] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} @@ -63,16 +63,16 @@ jobs: with: distribution: ${{ matrix.distribution }} java-version: | - 17 - - name: Set JAVA_TEST_PATH to 17 + 8 + - name: Set JAVA_TEST_PATH to 8 run: | - echo "JAVA_TEST_PATH=${JAVA_HOME_17_X64}" >> $GITHUB_ENV - if: matrix.java == '17' + echo "JAVA_TEST_PATH=${JAVA_HOME_8_X64}" >> $GITHUB_ENV + if: matrix.java == '8' - name: Java API Check run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 # Use jdk 17 for build + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 # Use jdk 8 for build JAVA_TEST_VERSION=${{ matrix.java }} cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict @@ -81,7 +81,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ japicmp --console=plain --no-daemon unitTest: @@ -91,31 +91,31 @@ jobs: matrix: os: [ubuntu-latest] distribution: ['liberica'] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK (include all 3 JDKs in env) + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} java-version: | - 17 + 8 - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 with: gradle-version: wrapper - - name: Set JAVA_TEST_PATH to 17 + - name: Set JAVA_TEST_PATH to 8 run: | - echo "JAVA_TEST_PATH=${JAVA_HOME_17_X64}" >> $GITHUB_ENV - if: matrix.java == '17' + echo "JAVA_TEST_PATH=${JAVA_HOME_8_X64}" >> $GITHUB_ENV + if: matrix.java == '8' - name: Run unit tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 # Use jdk 17 for build + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 # Use jdk 8 for build JAVA_TEST_VERSION=${{ matrix.java }} cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict @@ -125,7 +125,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ test --console=plain --no-daemon - uses: actions/upload-artifact@v4 if: failure() @@ -140,27 +140,27 @@ jobs: matrix: os: [ubuntu-latest] distribution: ['liberica'] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} java-version: | - 17 + 8 - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 with: gradle-version: wrapper - name: Run integration tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 JAVA_TEST_VERSION=${{ matrix.java }} cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict @@ -172,7 +172,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ integrationTest --console=plain --no-daemon - uses: actions/upload-artifact@v4 if: failure() @@ -187,13 +187,13 @@ jobs: matrix: os: [ubuntu-latest] distribution: ['liberica'] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} @@ -204,10 +204,10 @@ jobs: gradle-version: wrapper - name: Run acceptance tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 - JAVA_TEST_VERSION=17 + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 + JAVA_TEST_VERSION=8 cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ @@ -216,7 +216,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ acceptanceTest --console=plain --no-daemon - uses: actions/upload-artifact@v4 if: failure() @@ -231,13 +231,13 @@ jobs: matrix: os: [ubuntu-latest] distribution: ['liberica'] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} @@ -248,10 +248,10 @@ jobs: gradle-version: wrapper - name: Run wan distributed tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 - JAVA_TEST_VERSION=17 + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 + JAVA_TEST_VERSION=8 cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ @@ -262,7 +262,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ geode-wan:distributedTest --console=plain --no-daemon - uses: actions/upload-artifact@v4 if: failure() @@ -277,13 +277,13 @@ jobs: matrix: os: [ubuntu-latest] distribution: ['liberica'] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} @@ -294,10 +294,10 @@ jobs: gradle-version: wrapper - name: Run cq distributed tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 - JAVA_TEST_VERSION=17 + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 + JAVA_TEST_VERSION=8 cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ @@ -306,7 +306,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ geode-cq:distributedTest --console=plain --no-daemon - uses: actions/upload-artifact@v4 if: failure() @@ -321,13 +321,13 @@ jobs: matrix: os: [ubuntu-latest] distribution: ['liberica'] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} @@ -338,10 +338,10 @@ jobs: gradle-version: wrapper - name: Run lucene distributed tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 - JAVA_TEST_VERSION=17 + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 + JAVA_TEST_VERSION=8 cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ @@ -352,7 +352,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ geode-lucene:distributedTest --console=plain --no-daemon - uses: actions/upload-artifact@v4 if: failure() @@ -367,13 +367,13 @@ jobs: matrix: os: [ubuntu-latest] distribution: ['liberica'] - java: ['17'] + java: ['8'] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} @@ -384,10 +384,10 @@ jobs: gradle-version: wrapper - name: Run gfsh, web-mgmt, web distributed tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 - JAVA_TEST_VERSION=17 + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 + JAVA_TEST_VERSION=8 cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ @@ -397,7 +397,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ geode-gfsh:distributedTest \ geode-web:distributedTest \ geode-web-management:distributedTest --console=plain --no-daemon @@ -415,13 +415,13 @@ jobs: matrix: os: [ ubuntu-latest ] distribution: [ 'liberica' ] - java: [ '17' ] + java: [ '8' ] runs-on: ${{ matrix.os }} env: DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} steps: - uses: actions/checkout@v3 - - name: Set up JDK + - name: Set up JDK 8 uses: actions/setup-java@v3 with: distribution: ${{ matrix.distribution }} @@ -432,10 +432,10 @@ jobs: gradle-version: wrapper - name: Run assembly, connectors, old-client, extensions distributed tests run: | - GRADLE_JVM_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_PATH=${JAVA_HOME_17_X64} - JAVA_BUILD_VERSION=17 - JAVA_TEST_VERSION=17 + GRADLE_JVM_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_PATH=${JAVA_HOME_8_X64} + JAVA_BUILD_VERSION=8 + JAVA_TEST_VERSION=8 cp gradlew gradlewStrict sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \ @@ -445,7 +445,7 @@ jobs: -PcompileJVMVer=${JAVA_BUILD_VERSION} \ -PtestJVM=${JAVA_TEST_PATH} \ -PtestJVMVer=${JAVA_TEST_VERSION} \ - -PtestJava17Home=${JAVA_HOME_17_X64} \ + -PtestJava8Home=${JAVA_HOME_8_X64} \ geode-assembly:distributedTest \ geode-dunit:distributedTest \ geode-connectors:distributedTest \ From 29d9f2b6835b333e7ea20b796a4cc6ba40029e8b Mon Sep 17 00:00:00 2001 From: Sai Boorlagadda Date: Thu, 22 Jan 2026 07:42:45 -0800 Subject: [PATCH 3/5] Fix race condition in WanCopyRegionFunctionServiceTest The test severalExecuteWithDifferentRegionOrSenderAreAllowed was failing intermittently with 'expected: 5 but was: 2/3' due to a race condition. Root Cause: The test creates 5 CompletableFuture tasks using supplyAsync(), which executes asynchronously. There was no guarantee that all tasks would call service.execute() and be added to the executions map before the final assertion checked the count. The race occurred because: 1. CompletableFuture.supplyAsync() schedules tasks asynchronously 2. Multiple tasks could be scheduled but not yet executed 3. The assertion would run before all tasks had called service.execute() Solution: Instead of starting all tasks and then waiting, we now start each task sequentially and wait for it to be registered in the executions map before starting the next one. This ensures: - Each execution is fully registered before the next one starts - No race condition between task scheduling and execution registration - The final count is guaranteed to be 5 This approach is more deterministic and eliminates the race condition while still testing that multiple executions with different regions are allowed to run concurrently. --- .../internal/WanCopyRegionFunctionServiceTest.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/geode-wan/src/test/java/org/apache/geode/cache/wan/internal/WanCopyRegionFunctionServiceTest.java b/geode-wan/src/test/java/org/apache/geode/cache/wan/internal/WanCopyRegionFunctionServiceTest.java index 864aa63e7a63..03596ba8b016 100644 --- a/geode-wan/src/test/java/org/apache/geode/cache/wan/internal/WanCopyRegionFunctionServiceTest.java +++ b/geode-wan/src/test/java/org/apache/geode/cache/wan/internal/WanCopyRegionFunctionServiceTest.java @@ -154,7 +154,7 @@ public void cancelAllExecutionsWithRunningExecutionsReturnsCanceledExecutions() } @Test - public void severalExecuteWithDifferentRegionOrSenderAreAllowed() { + public void severalExecuteWithDifferentRegionOrSenderAreAllowed() throws InterruptedException { int executions = 5; CountDownLatch latch = new CountDownLatch(executions); for (int i = 0; i < executions; i++) { @@ -172,11 +172,16 @@ public void severalExecuteWithDifferentRegionOrSenderAreAllowed() { return null; } }); + + // Wait for this specific execution to be registered before starting the next one + // This ensures we don't have a race where multiple tasks try to start simultaneously + // and only some get registered before we check the count + await().untilAsserted( + () -> assertThat(service.getNumberOfCurrentExecutions()).isGreaterThanOrEqualTo(i + 1)); } - // Wait for the functions to start execution - await().untilAsserted( - () -> assertThat(service.getNumberOfCurrentExecutions()).isEqualTo(executions)); + // Verify all executions are registered + assertThat(service.getNumberOfCurrentExecutions()).isEqualTo(executions); // End executions for (int i = 0; i < executions; i++) { From 7a14c04312a2d4e9f1a6dcdfa88b152620b1f101 Mon Sep 17 00:00:00 2001 From: Sai Boorlagadda Date: Thu, 22 Jan 2026 09:08:52 -0800 Subject: [PATCH 4/5] Fix OplogEntryIdSetTest to avoid threshold-based overflow The test addMethodOverflowsWhenInternalAddThrowsIllegalArgumentException was failing with 'Expected size: 2 but was: 100' because the DRF_HASHMAP_OVERFLOW_THRESHOLD was set to 10 by another test (OplogEntryIdSetDrfHashSetThresholdTest). Root Cause: DRF_HASHMAP_OVERFLOW_THRESHOLD is a static final field initialized when DiskStoreImpl class is loaded. If OplogEntryIdSetDrfHashSetThresholdTest runs first and sets the system property to 10, then DiskStoreImpl loads with threshold=10 instead of the default 805306368. With threshold=10 and testEntries=1000: - The test adds 999 int entries and 999 long entries - Every 10 entries triggers shouldOverflow() to return true - This creates ~100 hash sets (999/10) instead of the expected 2 Solution: Reduced testEntries from 1000 to 5 to ensure we stay well below any possible threshold value (even if set to 10 by other tests). This ensures the test only creates overflow hash sets via the mocked IllegalArgumentException mechanism, not via the threshold mechanism. The test still validates the same behavior: - IllegalArgumentException during add() triggers overflow - New hash sets are created to handle the overflow - All entries (including those that caused the exception) are stored - All entries can be retrieved successfully --- .../org/apache/geode/internal/cache/OplogEntryIdSetTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java index 53ded131a6a9..77bb278aaca2 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java @@ -73,7 +73,10 @@ public void testBasics() { @Test public void addMethodOverflowsWhenInternalAddThrowsIllegalArgumentException() { - int testEntries = 1000; + // Use a small number of test entries to avoid triggering the threshold-based overflow + // The DRF_HASHMAP_OVERFLOW_THRESHOLD may be set to a small value (e.g., 10) by other tests + // and since it's a static final field, we can't change it at runtime + int testEntries = 5; int magicInt = testEntries + 1; long magicLong = 0x00000000FFFFFFFFL + testEntries + 1; From 0ef53eaac7d6d53f506d4336c852f3f6b03adfde Mon Sep 17 00:00:00 2001 From: Sai Boorlagadda Date: Thu, 22 Jan 2026 09:19:27 -0800 Subject: [PATCH 5/5] Revert OplogEntryIdSetTest change - restore testEntries to 1000 Reverting the change that reduced testEntries from 1000 to 5. The test should use a meaningful number of entries to properly validate the overflow behavior. --- .../org/apache/geode/internal/cache/OplogEntryIdSetTest.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java index 77bb278aaca2..53ded131a6a9 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/OplogEntryIdSetTest.java @@ -73,10 +73,7 @@ public void testBasics() { @Test public void addMethodOverflowsWhenInternalAddThrowsIllegalArgumentException() { - // Use a small number of test entries to avoid triggering the threshold-based overflow - // The DRF_HASHMAP_OVERFLOW_THRESHOLD may be set to a small value (e.g., 10) by other tests - // and since it's a static final field, we can't change it at runtime - int testEntries = 5; + int testEntries = 1000; int magicInt = testEntries + 1; long magicLong = 0x00000000FFFFFFFFL + testEntries + 1;