Add deprecation warnings for JAVA_HOME/older versions of Java (#13358)

* Add deprecation warnings for JAVA_HOME/older versions of Java

Logstash 8.0 will remove support for java versions before java 11, this commit
adds entries to the deprecation log warning against this.
Also adds use of `JAVA_HOME` to the deprecation log.
This commit is contained in:
Rob Bavey 2021-10-26 18:35:17 -04:00 committed by GitHub
parent 7952046eb8
commit c612afa5ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 103 additions and 1 deletions

View file

@ -14,7 +14,7 @@
# KIND, either express or implied. See the License for the # KIND, either express or implied. See the License for the
# specific language governing permissions and limitations # specific language governing permissions and limitations
# under the License. # under the License.
java_import 'org.logstash.util.JavaVersion'
Thread.abort_on_exception = true Thread.abort_on_exception = true
Encoding.default_external = Encoding::UTF_8 Encoding.default_external = Encoding::UTF_8
$DEBUGLIST = (ENV["DEBUG"] || "").split(",") $DEBUGLIST = (ENV["DEBUG"] || "").split(",")
@ -326,6 +326,12 @@ class LogStash::Runner < Clamp::StrictCommand
deprecation_logger.deprecated msg deprecation_logger.deprecated msg
end end
if JavaVersion::CURRENT < JavaVersion::JAVA_11
deprecation_logger.deprecated I18n.t("logstash.runner.java.version",
:java_home => java.lang.System.getProperty("java.home"))
end
deprecation_logger.deprecated I18n.t("logstash.runner.java.home") if ENV["JAVA_HOME"]
# Skip any validation and just return the version # Skip any validation and just return the version
if version? if version?
show_version show_version

View file

@ -433,6 +433,18 @@ en:
quiet: |+ quiet: |+
Set the log level to info. Set the log level to info.
DEPRECATED: use --log.level=info instead. DEPRECATED: use --log.level=info instead.
java:
home: >-
The use of JAVA_HOME has been deprecated. Logstash 8.0 and later ignores JAVA_HOME and uses the bundled JDK.
Running Logstash with the bundled JDK is recommended.
The bundled JDK has been verified to work with each specific version of Logstash, and generally provides best performance and reliability.
If you have compelling reasons for using your own JDK (organizational-specific compliance requirements, for example), you can configure LS_JAVA_HOME to use that version instead.
version: >-
Starting from Logstash 8.0, the minimum required version of Java is Java 11; your Java version from
%{java_home} does not meet this requirement. Please reconfigure your version of Java to one that is supported.
Running Logstash with the bundled JDK is recommended.
The bundled JDK has been verified to work with each specific version of Logstash, and generally provides best performance and reliability.
If you have compelling reasons for using your own JDK (organizational-specific compliance requirements, for example), you can configure LS_JAVA_HOME to use that version instead.
settings: settings:
deprecation: deprecation:
set: >- set: >-

View file

@ -0,0 +1,84 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. 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.
*/
package org.logstash.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* Helper class to compare current version of JVM with a target version.
* Based on JavaVersion class from elasticsearch java version checker tool
*/
public class JavaVersion implements Comparable<JavaVersion> {
public static final JavaVersion CURRENT = parse(System.getProperty("java.specification.version"));
public static final JavaVersion JAVA_11 = parse("11");
private final List<Integer> version;
private JavaVersion(List<Integer> version){
this.version = version;
}
static JavaVersion parse(final String value) {
if (value.matches("^0*[0-9]+(\\.[0-9]+)*$") == false) {
throw new IllegalArgumentException(value);
}
final List<Integer> version = new ArrayList<Integer>();
final String[] components = value.split("\\.");
for (final String component : components) {
version.add(Integer.valueOf(component));
}
return new JavaVersion(version);
}
public static int majorVersion(final JavaVersion javaVersion) {
Objects.requireNonNull(javaVersion);
if (javaVersion.version.get(0) > 1) {
return javaVersion.version.get(0);
} else {
return javaVersion.version.get(1);
}
}
private static int compare(final JavaVersion leftVersion, final JavaVersion rightVersion) {
List<Integer> left = leftVersion.version;
List<Integer> right = rightVersion.version;
// lexicographically compare two lists, treating missing entries as zeros
final int len = Math.max(left.size(), right.size());
for (int i = 0; i < len; i++) {
final int l = (i < left.size()) ? left.get(i) : 0;
final int r = (i < right.size()) ? right.get(i) : 0;
if (l < r) {
return -1;
}
if (r < l) {
return 1;
}
}
return 0;
}
@Override
public int compareTo(JavaVersion other) {
return compare(this, other);
}
}