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
Fri Jul 26 06:55:26 UTC 2019


Hi Bob, my change  only touches the test coding .

test/lib/jdk/test/lib/containers/cgroup/MetricsTester.java

I am not aware of  related issues in the HS code,  but I have not checked much .
This is what  java gives me on the system :

java  -XshowSettings:system -version

Operating System Metrics:
    Provider: cgroupv1
    Effective CPU Count: 8
    CPU Period: 100000us
    CPU Quota: -1
    CPU Shares: -1
    List of Processors, 8 total: 
    0 1 2 3 4 5 6 7 
    List of Effective Processors, 0 total: 
        List of Memory Nodes, 1 total: 
    0 
    List of Available Memory Nodes, 0 total: 
        CPUSet Memory Pressure Enabled: false
    Memory Limit: Unlimited
    Memory Soft Limit: Unlimited
    Memory & Swap Limit: 0.00K
    Kernel Memory Limit: 0.00K
    TCP Memory Limit: 0.00K
    Out Of Memory Killer Enabled: true

Best regards, Matthias


> 
> 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