[
https://issues.apache.org/jira/browse/ATLAS-5427?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paresh Devalia updated ATLAS-5427:
----------------------------------
Description:
The {{atlas-rest}} service defined in
{{dev-support/atlas-docker/docker-compose.atlas-rest.yml}} fails during JVM
startup when the underlying {{atlas-base}} image (or effective
{{{}JAVA_HOME{}}}) is Java 8.
Error (e.g. {{{}/var/log/atlas/rest-notification/rest.*.err{}}}):
{{Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.}}
Atlas 3.x rest-server artifacts are built for Java 17 (see
{{ATLAS_BUILD_JAVA_VERSION}} / Maven {{jdk-17}} profile). The rest notification
server must run on Java 17+, but the rest Docker image does not pin the JVM
version the way the main Atlas server image does.
h3. Steps to reproduce
# Build/start stack from {{dev-support/atlas-docker}} using
{{docker-compose.atlas-rest.yml}} (with Kafka/ZK from
{{{}docker-compose.atlas-common.yml{}}}).
# Use an {{atlas-base}} image where {{JAVA_HOME}} resolves to Java 8, or an
older base built before {{{}ATLAS_BASE_JAVA_VERSION=17{}}}.
# Observe rest container logs / {{rest.*.err}} — JVM exits before
{{RestNotificationMain}} starts.
----
h3. Root cause
# {{docker-compose.atlas-rest.yml}} sets {{REST_SERVER_OPTS}} with
{{{}--add-opens=...{}}}, which is invalid on Java 8. Those flags are already
added by {{distro/src/bin/rest_start.py}} → {{get_default_jvm_opts()}} when
Java ≥ 9.
h3. Expected behavior
* {{atlas-rest}} container starts successfully.
* HTTP listener on port 41000 (config: {{{}atlas.rest.server.http.port{}}}).
* Hook notification ingress available at
{{{}POST /rest/api/atlas/v2/notification/topic/{topicName{}}}} for payload
validation / REST hook path.
----
h3. Proposed fix
# {{Removing {{REST_SERVER_OPTS}} from docker-compose.atlas-rest.yml file}}
# Add a steps to start the rest-notification server after Atlas server up or
with the Atlas backend overlay
was:
The {{atlas-rest}} service defined in
{{dev-support/atlas-docker/docker-compose.atlas-rest.yml}} fails during JVM
startup when the underlying {{atlas-base}} image (or effective
{{{}JAVA_HOME{}}}) is Java 8.
Error (e.g. {{{}/var/log/atlas/rest-notification/rest.*.err{}}}):
{{Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.}}
Atlas 3.x rest-server artifacts are built for Java 17 (see
{{ATLAS_BUILD_JAVA_VERSION}} / Maven {{jdk-17}} profile). The rest notification
server must run on Java 17+, but the rest Docker image does not pin the JVM
version the way the main Atlas server image does.
h3. Steps to reproduce
# Build/start stack from {{dev-support/atlas-docker}} using
{{docker-compose.atlas-rest.yml}} (with Kafka/ZK from
{{{}docker-compose.atlas-common.yml{}}}).
# Use an {{atlas-base}} image where {{JAVA_HOME}} resolves to Java 8, or an
older base built before {{{}ATLAS_BASE_JAVA_VERSION=17{}}}.
# Observe rest container logs / {{rest.*.err}} — JVM exits before
{{RestNotificationMain}} starts.
----
h3. Root cause
# {{Dockerfile.atlas-rest}} extends {{atlas-base}} only and does not set
{{JAVA_HOME}} / {{update-java-alternatives}} like {{Dockerfile.atlas}} does via
{{{}ATLAS_SERVER_JAVA_VERSION{}}}.
# {{docker-compose.atlas-rest.yml}} sets {{REST_SERVER_OPTS}} with
{{{}--add-opens=...{}}}, which is invalid on Java 8. Those flags are already
added by {{distro/src/bin/rest_start.py}} → {{get_default_jvm_opts()}} when
Java ≥ 9.
h3. Expected behavior
* {{atlas-rest}} container starts successfully.
* HTTP listener on port 41000 (config: {{{}atlas.rest.server.http.port{}}}).
* Hook notification ingress available at
{{POST /rest/api/atlas/v2/notification/topic/\{topicName}}} for payload
validation / REST hook path.
----
h3. Proposed fix
# {{dev-support/atlas-docker/Dockerfile.atlas-rest}}
Add {{{}ARG ATLAS_SERVER_JAVA_VERSION{}}}, {{{}ARG TARGETARCH{}}}, set {{{}ENV
JAVA_HOME{}}}, and run {{update-java-alternatives}} (same pattern as
{{{}Dockerfile.atlas{}}}).
# {{dev-support/atlas-docker/docker-compose.atlas-rest.yml}}
** Pass build arg:
{{{}ATLAS_SERVER_JAVA_VERSION=${ATLAS_SERVER_JAVA_VERSION}{}}}.
** Optionally pass {{ATLAS_SERVER_JAVA_VERSION}} in {{{}environment{}}}.
** Remove hardcoded {{REST_SERVER_OPTS}} with {{--add-opens}} (rely on
{{{}rest_start.py{}}}).
# Docs
Document starting rest with:
{{{}docker compose -f docker-compose.atlas-common.yml -f
docker-compose.atlas-rest.yml up -d{}}}.
> atlas-rest Docker image fails to start on Java 8 base: unrecognized
> --add-opens JVM options
> -------------------------------------------------------------------------------------------
>
> Key: ATLAS-5427
> URL: https://issues.apache.org/jira/browse/ATLAS-5427
> Project: Atlas
> Issue Type: Bug
> Reporter: Paresh Devalia
> Assignee: Paresh Devalia
> Priority: Major
>
> The {{atlas-rest}} service defined in
> {{dev-support/atlas-docker/docker-compose.atlas-rest.yml}} fails during JVM
> startup when the underlying {{atlas-base}} image (or effective
> {{{}JAVA_HOME{}}}) is Java 8.
> Error (e.g. {{{}/var/log/atlas/rest-notification/rest.*.err{}}}):
> {{Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED
> Error: Could not create the Java Virtual Machine.
> Error: A fatal exception has occurred. Program will exit.}}
> Atlas 3.x rest-server artifacts are built for Java 17 (see
> {{ATLAS_BUILD_JAVA_VERSION}} / Maven {{jdk-17}} profile). The rest
> notification server must run on Java 17+, but the rest Docker image does not
> pin the JVM version the way the main Atlas server image does.
>
> h3. Steps to reproduce
> # Build/start stack from {{dev-support/atlas-docker}} using
> {{docker-compose.atlas-rest.yml}} (with Kafka/ZK from
> {{{}docker-compose.atlas-common.yml{}}}).
> # Use an {{atlas-base}} image where {{JAVA_HOME}} resolves to Java 8, or an
> older base built before {{{}ATLAS_BASE_JAVA_VERSION=17{}}}.
> # Observe rest container logs / {{rest.*.err}} — JVM exits before
> {{RestNotificationMain}} starts.
> ----
> h3. Root cause
> # {{docker-compose.atlas-rest.yml}} sets {{REST_SERVER_OPTS}} with
> {{{}--add-opens=...{}}}, which is invalid on Java 8. Those flags are already
> added by {{distro/src/bin/rest_start.py}} → {{get_default_jvm_opts()}} when
> Java ≥ 9.
> h3. Expected behavior
> * {{atlas-rest}} container starts successfully.
> * HTTP listener on port 41000 (config: {{{}atlas.rest.server.http.port{}}}).
> * Hook notification ingress available at
> {{{}POST /rest/api/atlas/v2/notification/topic/{topicName{}}}} for payload
> validation / REST hook path.
> ----
> h3. Proposed fix
> # {{Removing {{REST_SERVER_OPTS}} from docker-compose.atlas-rest.yml file}}
> # Add a steps to start the rest-notification server after Atlas server up or
> with the Atlas backend overlay
--
This message was sent by Atlassian Jira
(v8.20.10#820010)