[release-2.26.0][BEAM-11409] Revert java-versioning of SDK container #12505
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy b/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy
index 05a6b53..ed6ecff 100644
--- a/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy
+++ b/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy
@@ -46,7 +46,7 @@
gradle {
rootBuildScriptDir(properties.checkoutDir)
tasks 'javaExamplesDataflowPreCommit'
- switches '-PimageJavaVersion=11'
+ switches '-Pdockerfile=Dockerfile-java11'
switches '-PdisableSpotlessCheck=true'
switches '-PskipCheckerFramework' // Gradle itself is running under JDK8 so plugin configures wrong for JDK11
switches '-PcompileAndRunTestsWithJava11'
diff --git a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
index 39c10a8..6c611b2 100644
--- a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
@@ -1613,7 +1613,7 @@
// development image at docker.io (see sdks/CONTAINERS.md):
//
// format: apache/beam_$NAME_sdk:latest
- // ie: apache/beam_python3.7_sdk:latest apache/beam_java8_sdk:latest apache/beam_go_sdk:latest
+ // ie: apache/beam_python3.7_sdk:latest apache/beam_java_sdk:latest apache/beam_go_sdk:latest
//
// Both the root and tag can be defined using properties or explicitly provided.
project.ext.containerImageName = {
diff --git a/release/src/main/scripts/publish_docker_images.sh b/release/src/main/scripts/publish_docker_images.sh
index be8ba4a..4767928 100755
--- a/release/src/main/scripts/publish_docker_images.sh
+++ b/release/src/main/scripts/publish_docker_images.sh
@@ -27,7 +27,6 @@
DOCKER_IMAGE_DEFAULT_REPO_ROOT=apache
DOCKER_IMAGE_DEFAULT_REPO_PREFIX=beam_
-JAVA_VER=("java8")
PYTHON_VER=("python3.6" "python3.7" "python3.8")
FLINK_VER=("1.8" "1.9" "1.10")
@@ -49,7 +48,7 @@
echo '-------------------Tagging and Pushing Python images-----------------'
for ver in "${PYTHON_VER[@]}"; do
- # Pull verified RC from dockerhub.
+ # Pull varified RC from dockerhub.
docker pull ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}_${RC_VERSION}
# Tag with ${RELEASE} and push to dockerhub.
@@ -67,23 +66,21 @@
done
echo '-------------------Tagging and Pushing Java images-----------------'
- for ver in "${JAVA_VER[@]}"; do
- # Pull verified RC from dockerhub.
- docker pull ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}_${RC_VERSION}
+ # Pull varified RC from dockerhub.
+ docker pull ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:${RELEASE}_${RC_VERSION}
- # Tag with ${RELEASE} and push to dockerhub.
- docker tag ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}_${RC_VERSION} ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}
- docker push ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}
+ # Tag with ${RELEASE} and push to dockerhub.
+ docker tag ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:${RELEASE}_${RC_VERSION} ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:${RELEASE}
+ docker push ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:${RELEASE}
- # Tag with latest and push to dockerhub.
- docker tag ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}_${RC_VERSION} ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:latest
- docker push ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:latest
+ # Tag with latest and push to dockerhub.
+ docker tag ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:${RELEASE}_${RC_VERSION} ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:latest
+ docker push ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:latest
- # Cleanup images from local
- docker rmi -f ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}_${RC_VERSION}
- docker rmi -f ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:${RELEASE}
- docker rmi -f ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}${ver}_sdk:latest
- end
+ # Cleanup images from local
+ docker rmi -f ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:${RELEASE}_${RC_VERSION}
+ docker rmi -f ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:${RELEASE}
+ docker rmi -f ${DOCKER_IMAGE_DEFAULT_REPO_ROOT}/${DOCKER_IMAGE_DEFAULT_REPO_PREFIX}java_sdk:latest
echo '-------------Tagging and Pushing Flink job server images-------------'
echo "Publishing images for the following Flink versions:" "${FLINK_VER[@]}"
diff --git a/runners/core-construction-java/src/main/java/org/apache/beam/runners/core/construction/Environments.java b/runners/core-construction-java/src/main/java/org/apache/beam/runners/core/construction/Environments.java
index b3b821f..6944684 100644
--- a/runners/core-construction-java/src/main/java/org/apache/beam/runners/core/construction/Environments.java
+++ b/runners/core-construction-java/src/main/java/org/apache/beam/runners/core/construction/Environments.java
@@ -75,38 +75,6 @@
public static final String ENVIRONMENT_EMBEDDED = "EMBEDDED"; // Non Public urn for testing
public static final String ENVIRONMENT_LOOPBACK = "LOOPBACK"; // Non Public urn for testing
- public enum JavaVersion {
- v8("java8", "1.8"),
- v11("java11", "11");
-
- private final String name;
- private final String specification;
-
- JavaVersion(final String name, final String specification) {
- this.name = name;
- this.specification = specification;
- }
-
- @Override
- public String toString() {
- return this.name;
- }
-
- public String specification() {
- return this.specification;
- }
-
- public static JavaVersion forSpecification(String specification) {
- for (JavaVersion ver : JavaVersion.values()) {
- if (ver.specification.equals(specification)) {
- return ver;
- }
- }
- throw new UnsupportedOperationException(
- String.format("unsupported Java version: %s", specification));
- }
- }
-
/* For development, use the container build by the current user to ensure that the SDK harness and
* the SDK agree on how they should interact. This should be changed to a version-specific
* container during a release.
@@ -114,9 +82,12 @@
* See https://beam.apache.org/contribute/docker-images/ for more information on how to build a
* container.
*/
-
private static final String JAVA_SDK_HARNESS_CONTAINER_URL =
- getDefaultJavaSdkHarnessContainerUrl();
+ ReleaseInfo.getReleaseInfo().getDefaultDockerRepoRoot()
+ + "/"
+ + ReleaseInfo.getReleaseInfo().getDefaultDockerRepoPrefix()
+ + "java_sdk:"
+ + ReleaseInfo.getReleaseInfo().getSdkVersion();
public static final Environment JAVA_SDK_HARNESS_ENVIRONMENT =
createDockerEnvironment(JAVA_SDK_HARNESS_CONTAINER_URL);
@@ -351,10 +322,6 @@
return capabilities.build();
}
- public static JavaVersion getJavaVersion() {
- return JavaVersion.forSpecification(System.getProperty("java.specification.version"));
- }
-
public static String createStagingFileName(File path, HashCode hash) {
String encodedHash = Base64Variants.MODIFIED_FOR_URL.encode(hash.asBytes());
String fileName = Files.getNameWithoutExtension(path.getAbsolutePath());
@@ -393,13 +360,4 @@
return env;
}
}
-
- private static String getDefaultJavaSdkHarnessContainerUrl() {
- return String.format(
- "%s/%s%s_sdk:%s",
- ReleaseInfo.getReleaseInfo().getDefaultDockerRepoRoot(),
- ReleaseInfo.getReleaseInfo().getDefaultDockerRepoPrefix(),
- getJavaVersion().toString(),
- ReleaseInfo.getReleaseInfo().getSdkVersion());
- }
}
diff --git a/runners/core-construction-java/src/test/java/org/apache/beam/runners/core/construction/EnvironmentsTest.java b/runners/core-construction-java/src/test/java/org/apache/beam/runners/core/construction/EnvironmentsTest.java
index 3e6960e..7d8476d 100644
--- a/runners/core-construction-java/src/test/java/org/apache/beam/runners/core/construction/EnvironmentsTest.java
+++ b/runners/core-construction-java/src/test/java/org/apache/beam/runners/core/construction/EnvironmentsTest.java
@@ -20,7 +20,6 @@
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import java.io.IOException;
@@ -34,7 +33,6 @@
import org.apache.beam.model.pipeline.v1.RunnerApi.ParDoPayload;
import org.apache.beam.model.pipeline.v1.RunnerApi.ProcessPayload;
import org.apache.beam.model.pipeline.v1.RunnerApi.StandardEnvironments;
-import org.apache.beam.runners.core.construction.Environments.JavaVersion;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.coders.StringUtf8Coder;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
@@ -166,17 +164,4 @@
env1,
equalTo(components.toComponents().getEnvironmentsOrThrow(ptransform.getEnvironmentId())));
}
-
- @Test
- public void testJavaVersion() {
- assertEquals(JavaVersion.v8, JavaVersion.forSpecification("1.8"));
- assertEquals("java8", JavaVersion.v8.toString());
- assertEquals(JavaVersion.v11, JavaVersion.forSpecification("11"));
- assertEquals("java11", JavaVersion.v11.toString());
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void testJavaVersionInvalid() {
- assertEquals(JavaVersion.v8, JavaVersion.forSpecification("invalid"));
- }
}
diff --git a/runners/google-cloud-dataflow-java/build.gradle b/runners/google-cloud-dataflow-java/build.gradle
index 05b3e6c..62efe09 100644
--- a/runners/google-cloud-dataflow-java/build.gradle
+++ b/runners/google-cloud-dataflow-java/build.gradle
@@ -243,7 +243,7 @@
dependsOn ":sdks:java:container:docker"
finalizedBy 'cleanUpDockerImages'
def defaultDockerImageName = containerImageName(
- name: project.docker_image_default_repo_prefix + "java8_sdk",
+ name: project.docker_image_default_repo_prefix + "java_sdk",
root: "apache",
tag: project.sdk_version)
doLast {
diff --git a/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java b/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java
index fcbbe3b..0ba890e 100644
--- a/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java
+++ b/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java
@@ -382,16 +382,16 @@
}
// Adding the Java version to the SDK name for user's and support convenience.
- String agentJavaVer =
- (Environments.getJavaVersion() == Environments.JavaVersion.v8)
- ? "(JRE 8 environment)"
- : "(JDK 11 environment)";
+ String javaVersion =
+ Float.parseFloat(System.getProperty("java.specification.version")) >= 9
+ ? "(JDK 11 environment)"
+ : "(JRE 8 environment)";
DataflowRunnerInfo dataflowRunnerInfo = DataflowRunnerInfo.getDataflowRunnerInfo();
String userAgent =
String.format(
"%s/%s%s",
- dataflowRunnerInfo.getName(), dataflowRunnerInfo.getVersion(), agentJavaVer)
+ dataflowRunnerInfo.getName(), dataflowRunnerInfo.getVersion(), javaVersion)
.replace(" ", "_");
dataflowOptions.setUserAgent(userAgent);
@@ -2145,9 +2145,8 @@
static String getContainerImageForJob(DataflowPipelineOptions options) {
String workerHarnessContainerImage = options.getWorkerHarnessContainerImage();
- Environments.JavaVersion javaVersion = Environments.getJavaVersion();
String javaVersionId =
- (javaVersion == Environments.JavaVersion.v8) ? "java" : javaVersion.toString();
+ Float.parseFloat(System.getProperty("java.specification.version")) >= 9 ? "java11" : "java";
if (!workerHarnessContainerImage.contains("IMAGE")) {
return workerHarnessContainerImage;
} else if (hasExperiment(options, "beam_fn_api")) {
diff --git a/sdks/java/container/Dockerfile b/sdks/java/container/Dockerfile
index 95f20cd..b637384 100644
--- a/sdks/java/container/Dockerfile
+++ b/sdks/java/container/Dockerfile
@@ -15,8 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################
-ARG java_version
-FROM openjdk:${java_version}
+
+FROM openjdk:8
MAINTAINER "Apache Beam <dev@beam.apache.org>"
ARG pull_licenses
@@ -43,7 +43,7 @@
# copy an extra LICENSE file then remove it.
COPY target/LICENSE target/go-licenses/* /opt/apache/beam/third_party_licenses/golang/
RUN rm /opt/apache/beam/third_party_licenses/golang/LICENSE
-RUN if [ "${pull_licenses}" = "false" ] ; then \
+RUN if [ "$pull_licenses" = "false" ] ; then \
# Remove above license dir if pull licenses false
rm -rf /opt/apache/beam/third_party_licenses ; \
fi
diff --git a/sdks/java/container/Dockerfile-java11 b/sdks/java/container/Dockerfile-java11
new file mode 100644
index 0000000..1d85e85
--- /dev/null
+++ b/sdks/java/container/Dockerfile-java11
@@ -0,0 +1,45 @@
+###############################################################################
+# 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.
+###############################################################################
+
+FROM openjdk:11
+MAINTAINER "Apache Beam <dev@beam.apache.org>"
+
+ARG pull_licenses
+
+ADD target/slf4j-api.jar /opt/apache/beam/jars/
+ADD target/slf4j-jdk14.jar /opt/apache/beam/jars/
+ADD target/beam-sdks-java-harness.jar /opt/apache/beam/jars/
+
+# Required to run cross-language pipelines with KafkaIO
+# TODO May be removed once custom environments are supported
+ADD target/beam-sdks-java-io-kafka.jar /opt/apache/beam/jars/
+ADD target/kafka-clients.jar /opt/apache/beam/jars/
+
+ADD target/linux_amd64/boot /opt/apache/beam/
+
+# Add golang licenses. Because the go-license directory may be empty if
+# pull_licenses is false, and COPY fails if there are no files,
+# copy an extra LICENSE file then remove it.
+COPY target/LICENSE target/go-licenses/* /opt/apache/beam/third_party_licenses/golang/
+RUN rm /opt/apache/beam/third_party_licenses/golang/LICENSE
+RUN if [ "$pull_licenses" = "false" ] ; then \
+ # Remove above license dir if pull licenses false
+ rm -rf /opt/apache/beam/third_party_licenses ; \
+ fi
+
+ENTRYPOINT ["/opt/apache/beam/boot"]
diff --git a/sdks/java/container/build.gradle b/sdks/java/container/build.gradle
index 042dcf6..bdd073f 100644
--- a/sdks/java/container/build.gradle
+++ b/sdks/java/container/build.gradle
@@ -54,6 +54,8 @@
dockerDependency library.java.kafka_clients
}
+def dockerfileName = project.findProperty('dockerfile') ?: 'Dockerfile'
+
task copyDockerfileDependencies(type: Copy) {
from configurations.dockerDependency
rename "slf4j-api.*", "slf4j-api.jar"
@@ -86,22 +88,18 @@
renderers = [new JsonReportRenderer()]
}
-def imageJavaVersion = project.hasProperty('imageJavaVersion') ? project.findProperty('imageJavaVersion') : '8'
docker {
name containerImageName(
- name: "${project.docker_image_default_repo_prefix}java${imageJavaVersion}_sdk",
+ name: project.docker_image_default_repo_prefix + "java_sdk",
root: project.rootProject.hasProperty(["docker-repository-root"]) ?
project.rootProject["docker-repository-root"] :
project.docker_image_default_repo_root,
tag: project.rootProject.hasProperty(["docker-tag"]) ?
project.rootProject["docker-tag"] : project.sdk_version)
- dockerfile project.file("./Dockerfile")
+ dockerfile project.file("./${dockerfileName}")
files "./build/"
- buildArgs([
- 'pull_licenses': project.rootProject.hasProperty(["docker-pull-licenses"]) ||
- project.rootProject.hasProperty(["isRelease"]),
- 'java_version': imageJavaVersion,
- ])
+ buildArgs(['pull_licenses': project.rootProject.hasProperty(["docker-pull-licenses"]) ||
+ project.rootProject.hasProperty(["isRelease"])])
}
task pullLicenses(type: Exec) {
diff --git a/sdks/python/apache_beam/examples/kafkataxi/README.md b/sdks/python/apache_beam/examples/kafkataxi/README.md
index aba8fde..11b15f0 100644
--- a/sdks/python/apache_beam/examples/kafkataxi/README.md
+++ b/sdks/python/apache_beam/examples/kafkataxi/README.md
@@ -136,7 +136,7 @@
```sh
export DOCKER_ROOT="Your Docker Repository Root"
./gradlew :sdks:java:container:docker -Pdocker-repository-root=$DOCKER_ROOT -Pdocker-tag=latest
-docker push $DOCKER_ROOT/beam_java8_sdk:latest
+docker push $DOCKER_ROOT/beam_java_sdk:latest
```
For portable Flink/Spark in local mode, instead of above command just build the
@@ -184,6 +184,6 @@
--num_workers $NUM_WORKERS \
--job_name $JOB_NAME \
--bootstrap_servers $BOOTSTRAP_SERVER \
- --sdk_harness_container_image_overrides ".*java.*,${DOCKER_ROOT}/beam_java8_sdk:latest" \
+ --sdk_harness_container_image_overrides ".*java.*,${DOCKER_ROOT}/beam_java_sdk:latest" \
--experiments=use_runner_v2
```
diff --git a/website/www/site/content/en/contribute/release-guide.md b/website/www/site/content/en/contribute/release-guide.md
index d10fbf8..13c800a 100644
--- a/website/www/site/content/en/contribute/release-guide.md
+++ b/website/www/site/content/en/contribute/release-guide.md
@@ -575,7 +575,7 @@
```
- For Java SDK images, there should be around 200 dependencies.
```
- docker run -it --entrypoint=/bin/bash apache/beam_java${ver}_sdk:${RELEASE}_rc{RC_NUM}
+ docker run -it --entrypoint=/bin/bash apache/beam_java_sdk:${RELEASE}_rc{RC_NUM}
ls -al /opt/apache/beam/third_party_licenses/ | wc -l
```
1. Publish staging artifacts
diff --git a/website/www/site/content/en/documentation/runtime/environments.md b/website/www/site/content/en/documentation/runtime/environments.md
index 93ecbae..0089722 100644
--- a/website/www/site/content/en/documentation/runtime/environments.md
+++ b/website/www/site/content/en/documentation/runtime/environments.md
@@ -116,8 +116,8 @@
To examine the containers that you built, run `docker images` from anywhere in the command line. If you successfully built all of the container images, the command prints a table like the following:
```
-REPOSITORY TAG IMAGE ID CREATED SIZE
-apache/beam_java8_sdk latest 16ca619d489e 2 weeks ago 550MB
+REPOSITORY TAG IMAGE ID CREATED SIZE
+apache/beam_java_sdk latest 16ca619d489e 2 weeks ago 550MB
apache/beam_python2.7_sdk latest b6fb40539c29 2 weeks ago 1.78GB
apache/beam_python3.5_sdk latest bae309000d09 2 weeks ago 1.85GB
apache/beam_python3.6_sdk latest 42faad307d1a 2 weeks ago 1.86GB