[
https://issues.apache.org/jira/browse/CASSANDRA-21703?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Semb Wever updated CASSANDRA-21703:
-------------------------------------------
Test and Documentation Plan:
No automated test covers the shell scripts, so the gate was reproduced with two
shim {{java}} executables: one printing a JDK 17 version banner, on {{PATH}},
and one printing a JDK 21 banner, under {{JAVA_HOME}}.
Before the patch the gate read {{JAVA_VERSION=17}} while {{$JAVA}} pointed at
the JDK 21 shim. After it, {{JAVA_VERSION=21}}. With the JDK 17 shim taken off
{{PATH}}, the unpatched gate printed {{[: : integer expression expected}} three
times and then {{Unsupported Java .}}.
The change touches no Java, so no suite exercises it. It restores the
documented meaning of {{JAVA_HOME}} and alters no interface, so it needs no
{{NEWS.txt}} note.
Status: Patch Available (was: Open)
> The startup scripts read the JDK version from PATH rather than from JAVA_HOME
> -----------------------------------------------------------------------------
>
> Key: CASSANDRA-21703
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21703
> Project: Apache Cassandra
> Issue Type: Bug
> Components: Local/Scripts
> Reporter: Michael Semb Wever
> Priority: Normal
> Fix For: 6.0.x, 7.x
>
>
> {{bin/cassandra.in.sh}} and {{tools/bin/cassandra.in.sh}} resolve {{$JAVA}}
> from {{JAVA_HOME}}, and then read the version by running the bare {{java}}
> found on {{PATH}}:
> {code:none}
> if [ -n "$JAVA_HOME" ]; then
> for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
> if [ -x "$java" ]; then
> JAVA="$java"
> break
> fi
> done
> else
> JAVA=`command -v java 2> /dev/null`
> fi
> ...
> JAVA_VERSION=$(java -version 2>&1 | grep '[openjdk|java] version' | cut -d
> '"' -f2 | cut -d '.' -f1)
> {code}
> When {{JAVA_HOME}} and {{PATH}} name different JDKs, {{JAVA_VERSION}}
> describes a JVM that never runs, and two failures follow.
> The version gate then judges the wrong JVM. It refuses a supported JDK, or
> admits an unsupported one, and {{JVM_DEP_OPTS_FILE}} loads the
> {{jvm<N>-server.options}} file for the version it read. A node started with a
> JDK 21 {{JAVA_HOME}} and JDK 17 on {{PATH}} runs JDK 21 and reads
> {{jvm17-server.options}}.
> When {{JAVA_HOME}} is set and {{PATH}} holds no {{java}} at all,
> {{JAVA_VERSION}} is empty. The comparison loop reports {{[: : integer
> expression expected}} three times, and the gate exits with {{Unsupported Java
> .}}, though {{$JAVA}} names a supported JDK.
> The patch reads {{"$JAVA"}} in both files. The block above it exits when
> {{$JAVA}} is empty, so no fallback is needed. {{USING_JDK}} on the lines
> below is left alone: it looks for {{javac}} rather than {{java}}, and prefers
> {{PATH}} deliberately.
> CASSANDRA-18831 introduced the bare call, when it replaced the
> {{java_ver_output}} block that had read {{$JAVA}}. {{cassandra-5.0}} still
> reads {{$JAVA}} and is unaffected, so {{cassandra-6.0}} is the oldest
> affected branch.
> Patch:
> [mck/upstream/jdk-gate-ignores-java-home/6.0|https://github.com/thelastpickle/cassandra/tree/mck/upstream/jdk-gate-ignores-java-home/6.0]
> Provenance:
> [3927744acf|https://github.com/datastax/cassandra/commit/3927744acf9023a05340bdc198c89c3f4d6e0949]
> by [~mck], in
> [datastax/cassandra#2193|https://github.com/datastax/cassandra/pull/2193].
> That pull request rewrites the whole gate on the fork's {{main-5.0}} branch,
> adds JDK 22 to it, and carries fork-only packaging work beside it. This patch
> takes only the one correction that applies upstream.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]