RFR(S): 8246493: JDI stress/serial/mixed002 needs to use WhiteBox.deflateIdleMonitors support

Daniel D. Daugherty daniel.daugherty at oracle.com
Mon Jun 29 19:45:40 UTC 2020


Chris and Serguei,

Thanks for the fast reviews!!

I generated the webrev in my "mach5" directory and that was baselined
on the jdk-16+3 snapshot and that doesn't include the ProblemList change.
Sigh...  I have updated the repo to "current" and regenerated the webrev.

test/hotspot/jtreg/ProblemList.txt  now shows:

@@ -126,11 +126,10 @@
  vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Deadlock/JavaDeadlock001/TestDescription.java 8060733 generic-all

  vmTestbase/nsk/jdi/ThreadReference/stop/stop001/TestDescription.java 
7034630 generic-all
  vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses021/TestDescription.java 8065773 generic-all
  vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses023/TestDescription.java 8065773 generic-all
-vmTestbase/nsk/jdi/stress/serial/mixed002/TestDescription.java 8246493 
generic-all

  vmTestbase/nsk/jdb/eval/eval001/eval001.java 8221503 generic-all

  vmTestbase/metaspace/gc/firstGC_10m/TestDescription.java 8208250 
generic-all
  vmTestbase/metaspace/gc/firstGC_50m/TestDescription.java 8208250 
generic-all

Thanks again for the fast reviews!!

Dan


On 6/29/20 3:41 PM, serguei.spitsyn at oracle.com wrote:
> Hi Dan,
>
> The same as from Chris.
> The ProblemList.txt has no changes.
> Otherwise, it looks good.
>
> Thanks,
> Serguei
>
>
>
> On 6/29/20 12:37, Chris Plummer wrote:
>> Hi Dan,
>>
>> Something is wrong with ProblemList.txt. It doesn't show any changes, 
>> but I also don't see mixed002 in the file anymore.
>>
>> Otherwise the changes look good.
>>
>> thanks,
>>
>> Chris
>>
>> On 6/29/20 12:21 PM, Daniel D. Daugherty wrote:
>>> Greetings,
>>>
>>> I have a fix for the following bug:
>>>
>>>     JDK-8246493 JDI stress/serial/mixed002 needs to use 
>>> WhiteBox.deflateIdleMonitors support
>>>     https://bugs.openjdk.java.net/browse/JDK-8246493
>>>
>>> Here's the webrev URL:
>>>
>>> http://cr.openjdk.java.net/~dcubed/8246493-webrev/0_for_jdk16/
>>>
>>> The test bug that's being fixed:
>>>
>>> vmTestbase/nsk/jdi/stress/serial/mixed002/TestDescription.java fails
>>>     intermittently with the following message:
>>>
>>>      nsk.share.TestBug: There are more than one(2) instance of 
>>> 'nsk.share.jpda.StateTestThread in debuggee
>>>
>>> Summary of the fix:
>>>
>>>     Use WhiteBox.deflateIdleMonitors() to make sure that all inflated
>>>     ObjectMonitors are deflated after each debuggee has been run.
>>>
>>> This fix has been tested with a Mach5 Tier5 test run that executes all
>>> of the JDI tests (along with JDWP, JVM/TI and other Serviceability 
>>> tests).
>>> I also did five 100 iteration runs of the failing mix002 test. Each 
>>> Mach5
>>> job set ran the test 100 times on Linux-X64, macOSX, and Win-X64 for a
>>> total of (5 * 100 * 3) iterations of nsk/jdi/stress/serial/mixed002. 
>>> There
>>> were no failures.
>>>
>>> Thanks, in advance, for any comments, questions or suggestions.
>>>
>>> Dan
>>>
>>>
>>> Gory details:
>>>
>>> The primary focus of the fix is in the first three files in the webrev:
>>>
>>> test/hotspot/jtreg/vmTestbase/nsk/share/jdi/SerialExecutionDebuggee.java 
>>>
>>> test/hotspot/jtreg/vmTestbase/nsk/jdi/stress/serial/mixed002/TestDescription.java 
>>>
>>> test/hotspot/jtreg/ProblemList.txt
>>>
>>> nsk.share.jdi.SerialExecutionDebuggee is the class that used to 
>>> serially
>>> execute the debuggee portion of a specific list of tests. After this 
>>> class
>>> is done executing a debuggee class, it needs to deflate idle 
>>> monitors in
>>> order to prevent a StateTestThread object created by one debuggee class
>>> from confusing the next debuggee class. Each of the debuggee classes 
>>> that
>>> use StateTestThread expect there to be only one of these objects. 
>>> However,
>>> since we are running multiple debuggee classes serially *in the same 
>>> VM*,
>>> the StateTestThread object created in one debuggee can still be around
>>> when the next debuggee runs.
>>>
>>> The COMMAND_CLEAR_DEBUGGEE implementation clears the currentDebuggee 
>>> variable
>>> which permits the debuggee to be GC'ed and is modified by this fix 
>>> to call
>>> WhiteBox.deflateIdleMonitors() to make sure that all inflated 
>>> ObjectMonitors
>>> are deflated after each debuggee has been run. This takes care of 
>>> any pinned
>>> StateTestThread objects (and any other inflated ObjectMonitors).
>>>
>>>
>>> vmTestbase/nsk/jdi/stress/serial/mixed002 is a wrapper style stress 
>>> test that
>>> executes the debugger and debuggee parts of a specific list of tests 
>>> serially
>>> *in the same VM*. Several of the tests executed by mixed002 make use 
>>> of the
>>> StateTestThread class. The failure is intermittent because the order 
>>> of test
>>> execution is shuffled automatically and sometimes the ServiceThread 
>>> manages
>>> to execute deflation at the right time to prevent more than one 
>>> StateTestThread
>>> object from existing at the same time.
>>>
>>> The additions to vmTestbase/nsk/jdi/stress/serial/mixed002 are the 
>>> standard
>>> boilerplate needed to call WhiteBox functions from test code. The 
>>> actual call
>>> to WhiteBox.deflateIdleMonitors() is made in 
>>> SerialExecutionDebuggee. I did
>>> attempt a fix where I modified the StateTestThread class to make the 
>>> call to
>>> WhiteBox.deflateIdleMonitors() after the internal waitOnObject is no 
>>> longer
>>> contended or waited on. That fix reduced the frequency of the 
>>> failures by
>>> about half, but it didn't solve the test bug entirely. So I had to 
>>> make the
>>> fix in SerialExecutionDebuggee instead.
>>>
>>>
>>> test/hotspot/jtreg/ProblemList.txt is modified to re-enable the 
>>> mix002 test.
>>>
>>>
>>> The remaining nine files are also wrapper style stress tests that 
>>> execute
>>> the debugger and debuggee parts of a specific list of tests serially 
>>> *in
>>> the same VM*. Because these tests also use SerialExecutionDebuggee, 
>>> they
>>> also need the boilerplate changes so that 
>>> WhiteBox.deflateIdleMonitors()
>>> can be called.
>>
>>
>



More information about the serviceability-dev mailing list