RFR [XS]: 8228585: jdk/internal/platform/cgroup/TestCgroupMetrics.java - NumberFormatException because of large long values (memory limit_in_bytes)

Bob Vandette bob.vandette at oracle.com
Thu Jul 25 17:08:56 UTC 2019


Matthias,

Does this issue impact the VM Container code “jdk/open/src/hotspot/os/linux/osContainer_linux.cpp”?

Do we properly detect unlimited?

Try running “java -XshowSettings:system -version

Bob.


> On Jul 25, 2019, at 5:06 AM, Baesken, Matthias <matthias.baesken at sap.com> wrote:
> 
> Thank's fort he review .
> 
> Bob, are  you fine with my change too ?
> 
> Best regards, Matthias
> 
> 
>> -----Original Message-----
>> From: David Holmes <david.holmes at oracle.com>
>> Sent: Donnerstag, 25. Juli 2019 10:21
>> To: Baesken, Matthias <matthias.baesken at sap.com>; 'hotspot-
>> dev at openjdk.java.net' <hotspot-dev at openjdk.java.net>
>> Subject: Re: RFR [XS]: 8228585:
>> jdk/internal/platform/cgroup/TestCgroupMetrics.java -
>> NumberFormatException because of large long values (memory
>> limit_in_bytes)
>> 
>> Hi Matthias,
>> 
>> Looks like a good fix.
>> 
>> Minor nit:
>> 
>> !             // In this case, return Long.max
>> 
>> s/max/MAX_VALUE
>> 
>> Thanks,
>> David
>> 
>> On 25/07/2019 5:47 pm, Baesken, Matthias wrote:
>>> 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(NumberFormat
>> Exception.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(MetricsT
>> ester.java:160)
>>> at
>> jdk.test.lib.containers.cgroup.MetricsTester.testMemorySubsystem(Metrics
>> Tester.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(NativeMet
>> hodAccessorImpl.java:62)
>>> at
>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Delega
>> tingMethodAccessorImpl.java:43)
>>> at java.base/java.lang.reflect.Method.invoke(Method.java:567)
>>> at
>> com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapp
>> er.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