RFR [XS]: 8228585: jdk/internal/platform/cgroup/TestCgroupMetrics.java - NumberFormatException because of large long values (memory limit_in_bytes)
Baesken, Matthias
matthias.baesken at sap.com
Thu Jul 25 07:47:29 UTC 2019
Hello, please review this small test related fix .
On some linux x86_64 machine we run in the test "jdk/internal/platform/cgroup/TestCgroupMetrics.java" into this NumberFormatException :
java.lang.NumberFormatException: For input string: "18446744073709551615"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Long.parseLong(Long.java:699)
at java.base/java.lang.Long.parseLong(Long.java:824)
at jdk.test.lib.containers.cgroup.MetricsTester.getLongValueFromFile(MetricsTester.java:160)
at jdk.test.lib.containers.cgroup.MetricsTester.testMemorySubsystem(MetricsTester.java:223)
at TestCgroupMetrics.main(TestCgroupMetrics.java:50)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
at java.base/java.lang.Thread.run(Thread.java:830)
I checked the number "18446744073709551615" and it seems to be larger than Long.MAX_VALUE .
Background is that we seem to deal with unsigned long long ints where Java Long is not always sufficient .
There has been similar handling done here where in case of overflow we "round" to Long.MAX_VALUE :
java.base/linux/classes/jdk/internal/platform/cgroupv1/SubSystem.java
127 public static long convertStringToLong(String strval) {
128 long retval = 0;
129 if (strval == null) return 0L;
130
131 try {
132 retval = Long.parseLong(strval);
133 } catch (NumberFormatException e) {
134 // For some properties (e.g. memory.limit_in_bytes) we may overflow the range of signed long.
135 // In this case, return Long.max
And I do the same now in the test coding .
Bug/webrev :
https://bugs.openjdk.java.net/browse/JDK-8228585
http://cr.openjdk.java.net/~mbaesken/webrevs/8228585.0/
Thanks, Matthias
More information about the hotspot-dev
mailing list