Skip to content

Commit 0832232

Browse files
authored
Replace JavaVersion with Runtime.Version (#85361)
Since Java 9, the JDK has provided a means of parsing Java versions and getting the current Java version. That class obviates the need for the JavaVersion class of Elasticsearch. This commit removes the JavaVersion class in favor of Runtime.Version. Note that most of the changes here simply removed logic around versioning because this change is intended only for the master branch, where Java 17 is required.
1 parent 121d17c commit 0832232

File tree

36 files changed

+58
-903
lines changed

36 files changed

+58
-903
lines changed

libs/core/src/main/java/org/elasticsearch/jdk/JarHell.java

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.core.SuppressForbidden;
1313

1414
import java.io.IOException;
15+
import java.lang.Runtime.Version;
1516
import java.net.MalformedURLException;
1617
import java.net.URISyntaxException;
1718
import java.net.URL;
@@ -224,39 +225,19 @@ private static void checkManifest(Manifest manifest, Path jar) {
224225
// give a nice error if jar requires a newer java version
225226
String targetVersion = manifest.getMainAttributes().getValue("X-Compile-Target-JDK");
226227
if (targetVersion != null) {
227-
checkVersionFormat(targetVersion);
228228
checkJavaVersion(jar.toString(), targetVersion);
229229
}
230230
}
231231

232-
public static void checkVersionFormat(String targetVersion) {
233-
if (JavaVersion.isValid(targetVersion) == false) {
234-
throw new IllegalStateException(
235-
String.format(
236-
Locale.ROOT,
237-
"version string must be a sequence of nonnegative decimal integers separated by \".\"'s and may have "
238-
+ "leading zeros but was %s",
239-
targetVersion
240-
)
241-
);
242-
}
243-
}
244-
245232
/**
246233
* Checks that the java specification version {@code targetVersion}
247234
* required by {@code resource} is compatible with the current installation.
248235
*/
249236
public static void checkJavaVersion(String resource, String targetVersion) {
250-
JavaVersion version = JavaVersion.parse(targetVersion);
251-
if (JavaVersion.current().compareTo(version) < 0) {
237+
Version version = Version.parse(targetVersion);
238+
if (Runtime.version().compareTo(version) < 0) {
252239
throw new IllegalStateException(
253-
String.format(
254-
Locale.ROOT,
255-
"%s requires Java %s:, your system: %s",
256-
resource,
257-
targetVersion,
258-
JavaVersion.current().toString()
259-
)
240+
String.format(Locale.ROOT, "%s requires Java %s:, your system: %s", resource, targetVersion, Runtime.version().toString())
260241
);
261242
}
262243
}

libs/core/src/main/java/org/elasticsearch/jdk/JavaVersion.java

Lines changed: 0 additions & 122 deletions
This file was deleted.

libs/core/src/test/java/org/elasticsearch/jdk/JarHellTests.java

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.elasticsearch.test.ESTestCase;
1414

1515
import java.io.IOException;
16+
import java.lang.Runtime.Version;
1617
import java.net.URL;
1718
import java.nio.file.Files;
1819
import java.nio.file.Path;
@@ -27,6 +28,9 @@
2728
import java.util.zip.ZipEntry;
2829
import java.util.zip.ZipOutputStream;
2930

31+
import static org.hamcrest.Matchers.containsString;
32+
import static org.hamcrest.Matchers.equalTo;
33+
3034
public class JarHellTests extends ESTestCase {
3135

3236
URL makeJar(Path dir, String name, Manifest manifest, String... files) throws IOException {
@@ -132,25 +136,21 @@ public void testXmlBeansLeniency() throws Exception {
132136

133137
public void testRequiredJDKVersionTooOld() throws Exception {
134138
Path dir = createTempDir();
135-
List<Integer> current = JavaVersion.current().getVersion();
139+
List<Integer> current = Runtime.version().version();
136140
List<Integer> target = new ArrayList<>(current.size());
137141
for (int i = 0; i < current.size(); i++) {
138142
target.add(current.get(i) + 1);
139143
}
140-
JavaVersion targetVersion = JavaVersion.parse(Strings.collectionToDelimitedString(target, "."));
144+
Version targetVersion = Version.parse(Strings.collectionToDelimitedString(target, "."));
141145

142146
Manifest manifest = new Manifest();
143147
Attributes attributes = manifest.getMainAttributes();
144148
attributes.put(Attributes.Name.MANIFEST_VERSION, "1.0.0");
145149
attributes.put(new Attributes.Name("X-Compile-Target-JDK"), targetVersion.toString());
146150
Set<URL> jars = Collections.singleton(makeJar(dir, "foo.jar", manifest, "Foo.class"));
147-
try {
148-
JarHell.checkJarHell(jars, logger::debug);
149-
fail("did not get expected exception");
150-
} catch (IllegalStateException e) {
151-
assertTrue(e.getMessage().contains("requires Java " + targetVersion.toString()));
152-
assertTrue(e.getMessage().contains("your system: " + JavaVersion.current().toString()));
153-
}
151+
var e = expectThrows(IllegalStateException.class, () -> JarHell.checkJarHell(jars, logger::debug));
152+
assertThat(e.getMessage(), containsString("requires Java " + targetVersion));
153+
assertThat(e.getMessage(), containsString("your system: " + Runtime.version().toString()));
154154
}
155155

156156
public void testBadJDKVersionInJar() throws Exception {
@@ -160,18 +160,8 @@ public void testBadJDKVersionInJar() throws Exception {
160160
attributes.put(Attributes.Name.MANIFEST_VERSION, "1.0.0");
161161
attributes.put(new Attributes.Name("X-Compile-Target-JDK"), "bogus");
162162
Set<URL> jars = Collections.singleton(makeJar(dir, "foo.jar", manifest, "Foo.class"));
163-
try {
164-
JarHell.checkJarHell(jars, logger::debug);
165-
fail("did not get expected exception");
166-
} catch (IllegalStateException e) {
167-
assertTrue(
168-
e.getMessage()
169-
.equals(
170-
"version string must be a sequence of nonnegative decimal integers separated "
171-
+ "by \".\"'s and may have leading zeros but was bogus"
172-
)
173-
);
174-
}
163+
var e = expectThrows(IllegalArgumentException.class, () -> JarHell.checkJarHell(jars, logger::debug));
164+
assertThat(e.getMessage(), equalTo("Invalid version string: 'bogus'"));
175165
}
176166

177167
public void testRequiredJDKVersionIsOK() throws Exception {
@@ -184,24 +174,10 @@ public void testRequiredJDKVersionIsOK() throws Exception {
184174
JarHell.checkJarHell(jars, logger::debug);
185175
}
186176

187-
public void testValidVersions() {
188-
String[] versions = new String[] { "1.7", "1.7.0", "0.1.7", "1.7.0.80" };
189-
for (String version : versions) {
190-
try {
191-
JarHell.checkVersionFormat(version);
192-
} catch (IllegalStateException e) {
193-
fail(version + " should be accepted as a valid version format");
194-
}
195-
}
196-
}
197-
198177
public void testInvalidVersions() {
199178
String[] versions = new String[] { "", "1.7.0_80", "1.7." };
200179
for (String version : versions) {
201-
try {
202-
JarHell.checkVersionFormat(version);
203-
fail("\"" + version + "\"" + " should be rejected as an invalid version format");
204-
} catch (IllegalStateException e) {}
180+
expectThrows(IllegalArgumentException.class, () -> JarHell.checkJavaVersion("foo", version));
205181
}
206182
}
207183

libs/ssl-config/src/main/java/org/elasticsearch/common/ssl/SslConfigurationLoader.java

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
package org.elasticsearch.common.ssl;
1010

11-
import org.elasticsearch.jdk.JavaVersion;
12-
1311
import java.nio.file.Path;
1412
import java.security.KeyStore;
1513
import java.util.Arrays;
@@ -66,48 +64,6 @@ public abstract class SslConfigurationLoader {
6664
: Arrays.asList("TLSv1.2", "TLSv1.1")
6765
);
6866

69-
private static final List<String> JDK11_CIPHERS = List.of(
70-
// TLSv1.3 cipher has PFS, AEAD, hardware support
71-
"TLS_AES_256_GCM_SHA384",
72-
"TLS_AES_128_GCM_SHA256",
73-
74-
// PFS, AEAD, hardware support
75-
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
76-
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
77-
78-
// PFS, AEAD, hardware support
79-
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
80-
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
81-
82-
// PFS, hardware support
83-
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
84-
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
85-
86-
// PFS, hardware support
87-
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
88-
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
89-
90-
// PFS, hardware support
91-
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
92-
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
93-
94-
// PFS, hardware support
95-
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
96-
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
97-
98-
// AEAD, hardware support
99-
"TLS_RSA_WITH_AES_256_GCM_SHA384",
100-
"TLS_RSA_WITH_AES_128_GCM_SHA256",
101-
102-
// hardware support
103-
"TLS_RSA_WITH_AES_256_CBC_SHA256",
104-
"TLS_RSA_WITH_AES_128_CBC_SHA256",
105-
106-
// hardware support
107-
"TLS_RSA_WITH_AES_256_CBC_SHA",
108-
"TLS_RSA_WITH_AES_128_CBC_SHA"
109-
);
110-
11167
private static final List<String> JDK12_CIPHERS = List.of(
11268
// TLSv1.3 cipher has PFS, AEAD, hardware support
11369
"TLS_AES_256_GCM_SHA384",
@@ -157,9 +113,7 @@ public abstract class SslConfigurationLoader {
157113
"TLS_RSA_WITH_AES_128_CBC_SHA"
158114
);
159115

160-
static final List<String> DEFAULT_CIPHERS = JavaVersion.current().compareTo(JavaVersion.parse("12")) > -1
161-
? JDK12_CIPHERS
162-
: JDK11_CIPHERS;
116+
static final List<String> DEFAULT_CIPHERS = JDK12_CIPHERS;
163117
private static final char[] EMPTY_PASSWORD = new char[0];
164118

165119
private final String settingPrefix;

libs/ssl-config/src/test/java/org/elasticsearch/common/ssl/SslConfigurationLoaderTests.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.elasticsearch.common.settings.MockSecureSettings;
1212
import org.elasticsearch.common.settings.SecureString;
1313
import org.elasticsearch.common.settings.Settings;
14-
import org.elasticsearch.jdk.JavaVersion;
1514
import org.elasticsearch.test.ESTestCase;
1615

1716
import java.nio.file.Path;
@@ -27,7 +26,6 @@
2726
import static org.hamcrest.Matchers.hasItem;
2827
import static org.hamcrest.Matchers.instanceOf;
2928
import static org.hamcrest.Matchers.is;
30-
import static org.hamcrest.Matchers.not;
3129
import static org.hamcrest.Matchers.notNullValue;
3230

3331
public class SslConfigurationLoaderTests extends ESTestCase {
@@ -223,16 +221,8 @@ public void testLoadKeysFromJKS() {
223221
}
224222

225223
public void testChaCha20InCiphersOnJdk12Plus() {
226-
assumeTrue("Test is only valid on JDK 12+ JVM", JavaVersion.current().compareTo(JavaVersion.parse("12")) > -1);
227224
assertThat(SslConfigurationLoader.DEFAULT_CIPHERS, hasItem("TLS_CHACHA20_POLY1305_SHA256"));
228225
assertThat(SslConfigurationLoader.DEFAULT_CIPHERS, hasItem("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"));
229226
assertThat(SslConfigurationLoader.DEFAULT_CIPHERS, hasItem("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"));
230227
}
231-
232-
public void testChaCha20NotInCiphersOnPreJdk12() {
233-
assumeTrue("Test is only valid on pre JDK 12 JVM", JavaVersion.current().compareTo(JavaVersion.parse("12")) < 0);
234-
assertThat(SslConfigurationLoader.DEFAULT_CIPHERS, not(hasItem("TLS_CHACHA20_POLY1305_SHA256")));
235-
assertThat(SslConfigurationLoader.DEFAULT_CIPHERS, not(hasItem("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256")));
236-
assertThat(SslConfigurationLoader.DEFAULT_CIPHERS, not(hasItem("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256")));
237-
}
238228
}

modules/lang-painless/src/test/java/org/elasticsearch/painless/ArrayTests.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
package org.elasticsearch.painless;
1010

1111
import org.apache.lucene.util.Constants;
12-
import org.elasticsearch.jdk.JavaVersion;
1312
import org.hamcrest.Matcher;
1413

1514
import java.lang.invoke.MethodHandle;
@@ -31,11 +30,7 @@ protected String valueCtorCall(String valueType, int size) {
3130

3231
@Override
3332
protected Matcher<String> outOfBoundsExceptionMessageMatcher(int index, int size) {
34-
if (JavaVersion.current().compareTo(JavaVersion.parse("11")) < 0) {
35-
return equalTo(Integer.toString(index));
36-
} else {
37-
return equalTo("Index " + Integer.toString(index) + " out of bounds for length " + Integer.toString(size));
38-
}
33+
return equalTo("Index " + Integer.toString(index) + " out of bounds for length " + Integer.toString(size));
3934
}
4035

4136
public void testArrayLengthHelper() throws Throwable {

0 commit comments

Comments
 (0)