From b47aef41582d3ca404dd5f63baab568b5596a8d8 Mon Sep 17 00:00:00 2001 From: Michael Plump Date: Fri, 3 Apr 2020 12:07:31 -0400 Subject: [PATCH] chore(java11): Compile with Java 11 (but targeting Java 8) (#630) Additional differences: `UserRoleSyncer` was using `stream.map().count()` to run an operation on each element and then return the number of elements in the stream. But this doesn't work in Java 11 because "An implementation may choose to not execute the stream pipeline (either sequentially or in parallel) if it is capable of computing the count directly from the stream source." The Java 11 docs (unlike the Java 8 docs) include an explicit example of this exact thing we're doing and why it doesn't work. Fortunately we had to test to catch this. I wonder where else we're doing this... :/ --- .github/workflows/build.yml | 7 ++++++- .github/workflows/pr.yml | 7 ++++++- .github/workflows/release.yml | 9 +++++++-- Dockerfile.compile | 12 +++++++++--- .../spinnaker/fiat/roles/UserRolesSyncer.java | 10 ++++++---- gradle.properties | 2 +- 6 files changed, 35 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c4af76a0e..9e1d75c5a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,9 +13,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + # Install Java 8 for cross-compilation support. Setting it up before + # Java 11 means it comes later in $PATH (because of how setup-java works) - uses: actions/setup-java@v1 with: java-version: 8 + - uses: actions/setup-java@v1 + with: + java-version: 11 - uses: actions/cache@v1 with: path: ~/.gradle @@ -27,4 +32,4 @@ jobs: BINTRAY_USER: ${{ secrets.BINTRAY_USER }} BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} GRADLE_OPTS: -Xmx6g -Xms6g -Dorg.gradle.daemon=false - run: ./gradlew -PenablePublishing=true -PbintrayUser="${BINTRAY_USER}" -PbintrayKey="${BINTRAY_API_KEY}" build snapshot --stacktrace + run: ./gradlew -PenableCrossCompilerPlugin=true -PenablePublishing=true -PbintrayUser="${BINTRAY_USER}" -PbintrayKey="${BINTRAY_API_KEY}" build snapshot --stacktrace diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 344085601..7254e2fec 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -7,9 +7,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + # Install Java 8 for cross-compilation support. Setting it up before + # Java 11 means it comes later in $PATH (because of how setup-java works) - uses: actions/setup-java@v1 with: java-version: 8 + - uses: actions/setup-java@v1 + with: + java-version: 11 - uses: actions/cache@v1 with: path: ~/.gradle @@ -19,4 +24,4 @@ jobs: - name: Build env: GRADLE_OPTS: -Xmx6g -Xms6g -Dorg.gradle.daemon=false - run: ./gradlew build + run: ./gradlew -PenableCrossCompilerPlugin=true build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 19125dba8..18d87d1e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,9 +12,14 @@ jobs: steps: - uses: actions/checkout@v2 - run: git fetch --prune --unshallow + # Install Java 8 for cross-compilation support. Setting it up before + # Java 11 means it comes later in $PATH (because of how setup-java works) - uses: actions/setup-java@v1 with: java-version: 8 + - uses: actions/setup-java@v1 + with: + java-version: 11 - uses: actions/cache@v1 with: path: ~/.gradle @@ -37,7 +42,7 @@ jobs: BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} GRADLE_OPTS: -Xmx6g -Xms6g -Dorg.gradle.daemon=false run: | - ./gradlew -PenablePublishing=true --info -Prelease.disableGitChecks=true -Prelease.useLastTag=true -PbintrayUser="${BINTRAY_USER}" -PbintrayKey="${BINTRAY_API_KEY}" candidate + ./gradlew -PenableCrossCompilerPlugin=true -PenablePublishing=true --info -Prelease.disableGitChecks=true -Prelease.useLastTag=true -PbintrayUser="${BINTRAY_USER}" -PbintrayKey="${BINTRAY_API_KEY}" candidate - name: Release build if: steps.release_info.outputs.IS_CANDIDATE == 'false' env: @@ -45,7 +50,7 @@ jobs: BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} GRADLE_OPTS: -Xmx6g -Xms6g -Dorg.gradle.daemon=false run: | - ./gradlew -PenablePublishing=true --info -Prelease.disableGitChecks=true -Prelease.useLastTag=true -PbintrayUser="${BINTRAY_USER}" -PbintrayKey="${BINTRAY_API_KEY}" final + ./gradlew -PenableCrossCompilerPlugin=true -PenablePublishing=true --info -Prelease.disableGitChecks=true -Prelease.useLastTag=true -PbintrayUser="${BINTRAY_USER}" -PbintrayKey="${BINTRAY_API_KEY}" final - name: Create release if: steps.release_info.outputs.SKIP_RELEASE == 'false' uses: actions/create-release@v1 diff --git a/Dockerfile.compile b/Dockerfile.compile index c8a7af415..df57033e3 100644 --- a/Dockerfile.compile +++ b/Dockerfile.compile @@ -1,5 +1,11 @@ -FROM openjdk:8 +FROM ubuntu:bionic +RUN apt-get update && apt-get install -y \ + openjdk-8-jdk \ + openjdk-11-jdk \ + && rm -rf /var/lib/apt/lists/* MAINTAINER sig-platform@spinnaker.io +ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 +ENV JDK_18 /usr/lib/jvm/java-8-openjdk-amd64 ENV GRADLE_USER_HOME /workspace/.gradle -ENV GRADLE_OPTS -Xmx2048m -CMD ./gradlew --no-daemon fiat-web:installDist -x test +ENV GRADLE_OPTS -Xmx4g +CMD ./gradlew --no-daemon -PenableCrossCompilerPlugin=true fiat-web:installDist -x test diff --git a/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/roles/UserRolesSyncer.java b/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/roles/UserRolesSyncer.java index 930f68a12..17d8c56db 100644 --- a/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/roles/UserRolesSyncer.java +++ b/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/roles/UserRolesSyncer.java @@ -36,6 +36,7 @@ import com.netflix.spinnaker.kork.lock.LockManager; import java.time.Duration; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -273,10 +274,11 @@ public long updateUserPermissions(Map permissionsById) { long count = timeIt( "syncUsers", - () -> - permissionsResolver.resolve(extUsers).values().stream() - .map(permission -> permissionsRepository.put(permission)) - .count()); + () -> { + Collection values = permissionsResolver.resolve(extUsers).values(); + values.forEach(permissionsRepository::put); + return values.size(); + }); log.info("Synced {} non-anonymous user roles.", count); return count; } diff --git a/gradle.properties b/gradle.properties index 2101cb8bd..f54626e80 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ #Tue Mar 31 21:48:04 UTC 2020 enablePublishing=false -spinnakerGradleVersion=7.7.0 +spinnakerGradleVersion=7.9.0 korkVersion=7.31.1 org.gradle.parallel=true includeProviders=file,github,google-groups,ldap