I'll add a note to 8246493.

Dan


On 6/29/20 5:02 PM, Chris Plummer wrote:
Ok, in that case it sounds best not to backport. It would be best to make this clear in the bug so there is no future attempt to backport this change except to versions that have already done the WhiteBox.deflateIdleMonitors() backport.

thanks,

Chris

On 6/29/20 1:53 PM, Daniel D. Daugherty wrote:
The WhiteBox.deflateIdleMonitors() support is not in JDK15. That's
something that added in JDK16 so I'd have to also backport that support.
That support was included with another change (getting rid of the special
deflation request mechanism) that is not appropriate for JDK15.

Short version: I don't think we want to back port part of a patch from
JDK16 -> JDK15 in order to fix this test bug.

Dan


On 6/29/20 4:41 PM, Chris Plummer wrote:
Hi Dan,

I think you should push it directly to 15 since it's a new issue.

thanks,

Chris

On 6/29/20 12:53 PM, Daniel D. Daugherty wrote:
Chris,

Thanks. One last thing... since this is a test bug, I wasn't planning to backport the fix to JDK15. The test is ProblemListed there so we won't see
the intermittent failures.

Are you and Serguei good with not fixing this test bug in JDK15?

Dan

P.S.
Thanks again for your sleuthing that linked the bug to my
fix for JDK-8153224.


On 6/29/20 3:49 PM, Chris Plummer wrote:
Looks good.

Chris

On 6/29/20 12:45 PM, Daniel D. Daugherty wrote:
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, [email protected] 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.













Reply via email to