Hi Daniil,

Thank you for explanation!

Thanks,
Serguei

On 2/28/19 08:50, Daniil Titov wrote:
Hi Serguei,

It was intentional, there were two considerations here:
1. Test VirtualMachine/suspend/suspend001.java doesn't include a step that 
specifically expects that timeout should happen and checks for it (test 
ThreadReference/suspend/suspend001.java has such step, line 283)
2. Method breakpoint() in  VirtualMachine/suspend/suspend001.java doesn't 
result in any timeout failure in jtreg or Mach5 builds.

Best regards,
Daniil


On 2/28/19, 3:06 AM, "[email protected]" <[email protected]> 
wrote:

     Hi Daniil,
The fix looks good. One comment though.
     Did you miss to fix a timeout and comment in
     VirtualMachine/suspend/suspend001.java
     for breakpoint() the same way as it is done in
     ThreadReference/suspend/suspend001.java?
     Or it is intentional?
Thanks,
     Serguei
On 2/27/19 21:51, Daniil Titov wrote:
     > Hi Chris,
     >
     > Please review a new version that has this timeout increased as you 
suggested.
     >
     > Webrev: http://cr.openjdk.java.net/~dtitov/8207367/webrev.05/
     > Bug: https://bugs.openjdk.java.net/browse/JDK-8207367
     >
     > Thanks!
     > --Daniil
     >
     > On 2/27/19, 6:57 PM, "Chris Plummer" <[email protected]> wrote:
     >
     >      Hi Daniil,
     >
     >      I don't think exclfilter001.java and filter001.java are quite right:
     >
     >         92         waitTime = argHandler.getWaitTime();
     >        154         long waitTimeout = Utils.adjustTimeout(waitTime * 
200);
     >        161             eventSet = 
debugee.VM().eventQueue().remove(waitTimeout);
     >
     >      This looks like a 1 second wait whereas before I thought it was 5, 
which
     >      I thought was a good time to avoid timeouts from dropped packets. 
You
     >      also are using 5 seconds for remove() calls in other tests in this
     >      webrev. So I suggest just replacing 200 with 1000,
     >
     >      The rest of the changes look good.
     >
     >      thanks,
     >
     >      Chris
     >
     >
     >      On 2/27/19 5:44 PM, Daniil Titov wrote:
     >      > Hi Chris and Serguei,
     >      >
     >      > Please review  the new version of the fix that includes the 
changes Chris suggested.
     >      >
     >      > Webrev: http://cr.openjdk.java.net/~dtitov/8207367/webrev.04
     >      > Bug: https://bugs.openjdk.java.net/browse/JDK-8207367
     >      >
     >      > Thanks!
     >      > --Daniil
     >      >
     >      >
     >      > On 2/27/19, 5:10 PM, "Daniil Titov" <[email protected]> 
wrote:
     >      >
     >      >      Hi Chris,
     >      >
     >      >      >>    Is there a reason not to adjust it by 
argHandler.getWaitTime()?
     >      >      I agree, for consistency it makes sense to adjust it by 
argHandler.getWaitTime().
     >      >
     >      >      Thanks.
     >      >      Daniil
     >      >
     >      >      On 2/27/19, 4:54 PM, "Chris Plummer" 
<[email protected]> wrote:
     >      >
     >      >          On 2/27/19 4:09 PM, Daniil Titov wrote:
     >      >          > Hi Chris,
     >      >          >
     >      >          >> It look like the exclfilter001.java loop will always 
end up looping for  eventWaitTime seconds:
     >      >          > It is true for  revision 3 of the patch 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.03/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassUnloadRequest/addClassExclusionFilter/exclfilter001.java.sdiff.html
     >      >          >
     >      >          > But in revision 1 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.01/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassUnloadRequest/addClassExclusionFilter/exclfilter001.java.sdiff.html
   the loop could finish earlier if timeout happens on lines 160 or 183 (since eventSet 
is null).
     >      >          > When talking about 4 seconds I was referring to lines 
160, 163 and 183. Now the timeout passed in remove(waitTime) method is 4 seconds in 
Mach5. But the total waiting time is limited by 200 seconds. If no events are delivered 
for 4 seconds timespan then the method returns earlier.
     >      >          > It seems as 4 seconds is quite sufficient, but we 
could increase it if there are some concerns here.
     >      >          >
     >      >          > 153         long waitTime = Utils.adjustTimeout(1000);
     >      >          > 160             eventSet = 
debugee.VM().eventQueue().remove(waitTime);
     >      >          > 185                 eventSet = 
debugee.VM().eventQueue().remove(waitTime);
     >      >
     >      >          Is there a reason not to adjust it by 
argHandler.getWaitTime()?
     >      >
     >      >          Chris
     >      >
     >      >          >
     >      >          >
     >      >          > Thanks!
     >      >          >
     >      >          > --Daniil
     >      >          >
     >      >          >
     >      >          > On 2/27/19, 3:08 PM, "Chris Plummer" 
<[email protected]> wrote:
     >      >          >
     >      >          >
     >      >          >
     >      >          >      On 2/27/19 2:33 PM, Daniil Titov wrote:
     >      >          >      > Hi Chris,
     >      >          >      >
     >      >          >      > The change in while loop  in exclfilter001.java 
between the first and the last revisions was to ensure that all events are drained before 
the method returns and the next check starts. It used to wait for 5 minutes and now it 
keeps receiving events in portions waiting for 1 seconds at every iteration.
     >      >          >      It look like the exclfilter001.java loop will 
always end up looping for
     >      >          >      eventWaitTime seconds:
     >      >          >
     >      >          >         92         eventWaitTime =
     >      >          >      Utils.adjustTimeout(argHandler.getWaitTime() * 
10000);
     >      >          >
     >      >          >        125             receiveEvents(eventWaitTime, 
patterns[i]);
     >      >          >
     >      >          >      I think you said that argHandler.getWaitTime() is 
5 and
     >      >          >      Utils.adjustTimeout() is another 4x for mach5 
jobs, so this would mean a
     >      >          >      total of 200 seconds, and this is how much time 
the loop would always
     >      >          >      take since it loops for eventWaitTime seconds.
     >      >          >      >   You mentioned in one of previous emails that 
due to network issues  it might be the case that for some iteration we fail to receive an 
event within this smaller timeout. But later, if I understood you right, you suggested that 
4 seconds ( Utils.adjustTimeout(1000) adjusts timeout for Mach5 builds to 4 seconds) should 
be sufficient.
     >      >          >      Actually I was going more by the 
argHandler.getWaitTime() adjustment,
     >      >          >      which I thought was 5. Mach5 will multiply that 
by 4. I think 1s is too
     >      >          >      short but 5s is probably ok, and 20s for mach5 
jobs should prevent any
     >      >          >      noise from rare network issues, except for 
serious ones that we can't
     >      >          >      expect to recover from.
     >      >          >      >    I agree that it's better to make the test 
return earlier and I will revert changes in exclfilter001.java and filter001.java to the 
first revision.
     >      >          >      Ok.
     >      >          >      >
     >      >          >      > For consistency I will change line 153 to take 
into account a wait time specified in argHandler.getWaitTime()
     >      >          >      > 153         long waitTime = 
Utils.adjustTimeout(1000);
     >      >          >      >
     >      >          >      Ok.
     >      >          >      > I am sorry I missed you comments abut 
Utils.java. You are right we don’t need a new method and Utils.waitForCondition() should be 
sufficient.
     >      >          >      > There is no need for passing logger into since 
if the thread is interrupted the error is thrown and the test fails.  Will send a new 
webrev as soon as testing completes.
     >      >          >      thanks,
     >      >          >
     >      >          >      Chris
     >      >          >      > Thanks!
     >      >          >      > Daniil
     >      >          >      >
     >      >          >      >
     >      >          >      > On 2/27/19, 12:08 PM, "Chris Plummer" 
<[email protected]> wrote:
     >      >          >      >
     >      >          >      >      Hi Daniil,
     >      >          >      >
     >      >          >      >      In exclfilter001.java, since the first 
revision you changed the while
     >      >          >      >      loop to be "while (true)". I'm not sure of 
the reasoning. It used to
     >      >          >      >      exit the first time remove() didn't return 
an EventSet. Now it retries
     >      >          >      >      until the total waittime is exceeded.
     >      >          >      >
     >      >          >      >      When waiting for an event, sometimes you 
use:
     >      >          >      >
     >      >          >      >         91         eventWaitTime =
     >      >          >      >      
Utils.adjustTimeout(argHandler.getWaitTime() * 10000);
     >      >          >      >
     >      >          >      >      and sometimes:
     >      >          >      >
     >      >          >      >        153         long waitTime = 
Utils.adjustTimeout(1000);
     >      >          >      >
     >      >          >      >      Why the discrepancy. In one case you are 
willing to wait 50 seconds for
     >      >          >      >      an event and in the other only 5.
     >      >          >      >
     >      >          >      >      I think you missed my initial comment on 
Utils.java. See below:
     >      >          >      >
     >      >          >      >      > In Utils.java, I think wait() should be 
moved right after
     >      >          >      >      > waitForCondition() and maybe given a 
more descriptive name. It seems
     >      >          >      >      > to basically the same as waitForCondition(), 
except you added a "log"
     >      >          >      >      > parameter and slightly changed the 
behavior. Are these behavior
     >      >          >      >      > differences necessary? Could you share 
code with the existing
     >      >          >      >      > waitForCondition()?
     >      >          >      >
     >      >          >      >      thanks,
     >      >          >      >
     >      >          >      >      Chris
     >      >          >      >
     >      >          >      >      On 2/27/19 9:03 AM, Daniil Titov wrote:
     >      >          >      >      > Hi Serguei and Chris,
     >      >          >      >      >
     >      >          >      >      > Thank you for reviewing this change. 
Please review a new version of the fix that addresses these findings.
     >      >          >      >      >
     >      >          >      >      > Bug: 
https://bugs.openjdk.java.net/browse/JDK-8207367
     >      >          >      >      > Webrev: 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.03
     >      >          >      >      >
     >      >          >      >      > Best regards,
     >      >          >      >      > Daniil
     >      >          >      >      >
     >      >          >      >      > From: <[email protected]>
     >      >          >      >      > Organization: Oracle Corporation
     >      >          >      >      > Date: Tuesday, February 26, 2019 at 6:50 
PM
     >      >          >      >      > To: Daniil Titov <[email protected]>, Chris 
Plummer <[email protected]>, OpenJDK Serviceability <[email protected]>
     >      >          >      >      > Subject: Re: RFR 8207367: 10 
vmTestbase/nsk/jdi tests timed out when running with jtreg
     >      >          >      >      >
     >      >          >      >      > Hi Daniil,
     >      >          >      >      >
     >      >          >      >      > It looks good to me.
     >      >          >      >      > I have some minor comments though.
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/ClassUnloadRequest/addClassFilter/filter001.java.frames.html
     >      >          >      >      >
     >      >          >      >      >   163                 if(eventSet != 
null) {
     >      >          >      >      >   Space is missed after if
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/EventQueue/remove/remove004.java.frames.html
     >      >          >      >      >    70  * In first one, second thread waits for 
any incoming event from the    <BR>
     >      >          >      >      >    71  * debugger which is sleeping for some 
time; hence, <BR>
     >      >          >      >      >    72  * no events are expected to be received 
at the debugger end.           <BR>
     >      >          >      >      >   <BR> is not aligned at 71
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >   While you are at this code, could you, 
please,
     >      >          >      >      >   also fix unneeded spaces at the lines? 
:
     >      >          >      >      >   516             } catch ( 
InterruptedException e1) {
     >      >          >      >      >   ...
     >      >          >      >      >   526             } catch ( Exception e 
) {
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/EventQueue/remove/remove004a.java.frames.html
     >      >          >      >      >   111                                    
     Utils.adjustTimeout(argHandler.getWaitTime() * 10000),
     >      >          >      >      >   112                                    
    100,
     >      >          >      >      >   113                                    
     remove004a::log1);
     >      >          >      >      >    Line 112 is not properly aligned
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l004.java.frames.html
     >      >          >      >      >    65  * In the first one the first assertion 
is checked up on as follows:    <BR>
     >      >          >      >      >    66  * the debugger sleeps for some time;    
                              <BR>
     >      >          >      >      >    67  * hence, no event is expected in the 
debugger within WAITTIME, and     <BR>
     >      >          >      >      >    <BR> at 66 is not aligned
     >      >          >      >      >    Thank you for catching and fixing the 
typo at 67!
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose002.java.frames.html
     >      >          >      >      >
     >      >          >      >      >   295                         }, 
Utils.adjustTimeout(waitTime * 60000), 1000, dispose002::log3);
     >      >          >      >      >   A separate line is needed for next 
wait() argument
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose002a.java.frames.html
     >      >          >      >      >   128                          
while(true) {
     >      >          >      >      >   ...
     >      >          >      >      >   130                              
if(instruction.equals("check_done")){
     >      >          >      >      >   131                                  
if (test_thread.isAlive()) {
     >      >          >      >      >   132                                    
  exitCode = FAILED;
     >      >          >      >      >   133                                  }
     >      >          >      >      >
     >      >          >      >      >    Space is missed after while.
     >      >          >      >      >    Some logErr("...") for failed case 
would be useful.
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose003.java.frames.html
     >      >          >      >      >   260                         }, 
Utils.adjustTimeout(waitTime * 60000), 1000, dispose003::log3);
     >      >          >      >      >   New line is needed for next wait() 
argument
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose003a.java.frames.html
     >      >          >      >      >   129                          
while(true) {
     >      >          >      >      >   130                              
instruction = pipe.readln();
     >      >          >      >      >   131                              
if(instruction.equals("check_done")) {
     >      >          >      >      >   132                                  
if (test_thread.isAlive()) {
     >      >          >      >      >   133                                    
  exitCode = FAILED;
     >      >          >      >      >   134                                  }
     >      >          >      >      >    Space is missed after while and if.
     >      >          >      >      >    Some logErr("...") for failed case 
would be useful.
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose004.java.frames.html
     >      >          >      >      >   284                         }, 
Utils.adjustTimeout(waitTime * 60000), 1000, dispose004::log3);
     >      >          >      >      >   New line is needed for next wait() 
argument
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose004a.java.frames.html
     >      >          >      >      >   130                          
while(true) {
     >      >          >      >      >   131                              
instruction = pipe.readln();
     >      >          >      >      >   132                              
if(instruction.equals("check_done")) {
     >      >          >      >      >   133                                  
if (test_thread.isAlive()) {
     >      >          >      >      >   134                                    
  exitCode = FAILED;
     >      >          >      >      >   135                                  }
     >      >          >      >      >    Space is missed after while and if.
     >      >          >      >      >    Some logErr("...") for failed case 
would be useful.
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > Thanks,
     >      >          >      >      > Serguei
     >      >          >      >      >
     >      >          >      >      > On 2/26/19 6:06 PM, Daniil Titov wrote:
     >      >          >      >      > Hi Chris,
     >      >          >      >      >
     >      >          >      >      > Please review a new version of the 
webrev that slightly changes method receiveEvents(long,pattern)  in the following tests:
     >      >          >      >      >   
-vmTestbase/nsk/jdi/ClassUnloadRequest/addClassExclusionFilter/exclfilter001.java
     >      >          >      >      >   
-vmTestbase/nsk/jdi/ClassUnloadRequest/addClassFilter/filter001.java)
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > The new changes ensure that 
receiveEvents(long,pattern)  method keeps receiving events in a while loop even if eventSet 
returned by  debugee.VM().eventQueue().remove(waitTime) is a null due to timeout.
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      > Bug: 
https://bugs.openjdk.java.net/browse/JDK-8207367
     >      >          >      >      > Webrev: 
http://cr.openjdk.java.net/~dtitov/8207367/webrev.02
     >      >          >      >      >
     >      >          >      >      > Thanks!
     >      >          >      >      > -Daniil
     >      >          >      >      >
     >      >          >      >      > On 2/26/19, 11:41 AM, "Chris Plummer" 
mailto:[email protected] wrote:
     >      >          >      >      >
     >      >          >      >      >      Ok. I think you mentioned below 
that default wait time will be 5
     >      >          >      >      >      seconds. That seems sufficient to 
avoid a timeout if there are some
     >      >          >      >      >      minor network issues and some 
packets are lost.
     >      >          >      >      >
     >      >          >      >      >      Changes look good.
     >      >          >      >      >
     >      >          >      >      >      thanks,
     >      >          >      >      >
     >      >          >      >      >      Chris
     >      >          >      >      >
     >      >          >      >      >      On 2/26/19 10:01 AM, Daniil Titov 
wrote:
     >      >          >      >      >      > Hi Chris,
     >      >          >      >      >      >
     >      >          >      >      >      > Yes , it is correct. For example 
in this particular test the timeout is expected (line 283 expects that breakpoint() returns 
returnCode3 that is set on line 460 when eventSet on line 456 is null due to a timeout in 
eventQueue.remove()) and shortening it makes the whole test fit in jtreg time limits.
     >      >          >      >      >      >
     >      >          >      >      >      >    281                  log2("       
checking up that the thread2 is not at breakpoint1 because of suspension");
     >      >          >      >      >      >     282                 expresult 
= breakpoint();
     >      >          >      >      >      >     283                 if 
(expresult != returnCode3) {
     >      >          >      >      >      >     284                     
log3("ERROR: no timeout for waiting for BreakpointEvent when the thread2 is suspended");
     >      >          >      >      >      >     285                     
expresult = returnCode1;
     >      >          >      >      >      >     286                     break 
label1;
     >      >          >      >      >      >     287                 } else
     >      >          >      >      >      >
     >      >          >      >      >      >
     >      >          >      >      >      >    445      private int 
breakpoint () {
     >      >          >      >      >      >     446 
     >      >          >      >      >      >     447         int returnCode = 
returnCode0;
     >      >          >      >      >      >     448 
     >      >          >      >      >      >     449         log2("       waiting 
for BreakpointEvent");
     >      >          >      >      >      >     450 
     >      >          >      >      >      >     451         labelBP:
     >      >          >      >      >      >     452             for (;;) {
     >      >          >      >      >      >     453 
     >      >          >      >      >      >     454                 log2("       
new:  eventSet = eventQueue.remove();");
     >      >          >      >      >      >     455                 try {
     >      >          >      >      >      >     456                     
eventSet = eventQueue.remove (Utils.adjustTimeout(waitTime*1000));
     >      >          >      >      >      >     457                     if 
(eventSet == null) {
     >      >          >      >      >      >     458                         
log2("::::::  timeout when waiting for a BreakpintEvent");
     >      >          >      >      >      >     459 //                        
log3("ERROR:  timeout for waiting for a BreakpintEvent");
     >      >          >      >      >      >     460                         
returnCode = returnCode3;
     >      >          >      >      >      >     461                         
break labelBP;
     >      >          >      >      >      >     462                     }
     >      >          >      >      >      >
     >      >          >      >      >      >>     And I just noticed the space right 
after "remove". Can you remove it?
     >      >          >      >      >      > Sure. Will do.
     >      >          >      >      >      >
     >      >          >      >      >      > Thanks!
     >      >          >      >      >      > --Daniil
     >      >          >      >      >      >
     >      >          >      >      >      > On 2/25/19, 7:26 PM, "Chris 
Plummer" mailto:[email protected] wrote:
     >      >          >      >      >      >
     >      >          >      >      >      >      Hi Daniil,
     >      >          >      >      >      >
     >      >          >      >      >      >      For suspend001, are you 
saying the following is expected to timeout
     >      >          >      >      >      >      sometimes, so you need a 
shorter waittime to avoid making the whole test
     >      >          >      >      >      >      time out?
     >      >          >      >      >      >
     >      >          >      >      >      >        456                     
eventSet = eventQueue.remove
     >      >          >      >      >      >      
(Utils.adjustTimeout(waitTime*1000));
     >      >          >      >      >      >
     >      >          >      >      >      >      And I just noticed the space right 
after "remove". Can you remove it?
     >      >          >      >      >      >
     >      >          >      >      >      >      thanks,
     >      >          >      >      >      >
     >      >          >      >      >      >      Chris
     >      >          >      >      >      >
     >      >          >      >      >      >      On 2/25/19 6:57 PM, Daniil 
Titov wrote:
     >      >          >      >      >      >      > Hi Chris,
     >      >          >      >      >      >      >
     >      >          >      >      >      >      > The timeout issue 
mentioned in the bug is about jtreg aborting the tests since they are running longer than the 
maximum allowed time. That happens since these tests  use extreme long internal delays,  e.g. a 
sleep for 5 minutes  or a wait for 5 minutes for a case when no events ( and a notify()) are 
expected. Reducing these internal delays makes the test passing within the default jtreg timeout ( 2 
minutes).
     >      >          >      >      >      >      >
     >      >          >      >      >      >      > Best regards,
     >      >          >      >      >      >      > Daniil
     >      >          >      >      >      >      >
     >      >          >      >      >      >      > On 2/25/19, 6:15 PM, "Chris 
Plummer" mailto:[email protected] wrote:
     >      >          >      >      >      >      >
     >      >          >      >      >      >      >      Ok. So how is the 
timeout issue mentioned in the bug addressed when
     >      >          >      >      >      >      >      there is now a 
shorter wait time?
     >      >          >      >      >      >      >
     >      >          >      >      >      >      >      Chris
     >      >          >      >      >      >      >
     >      >          >      >      >      >      >      On 2/25/19 5:04 PM, 
Daniil Titov wrote:
     >      >          >      >      >      >      >      > Hi Chris,
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      > Forgot to answer to 
your another question:
     >      >          >      >      >      >      >      >   >      > For 
these 3 tests the event wait timeout was reduced and adjusted for test.timeout.factor:
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/Event/_itself_/event001.java
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/VirtualMachine/suspend/suspend001/TestDescription.java
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/ThreadReference/suspend/suspend001.java
     >      >          >      >      >      >      >      >      >      So 
overall is this a shorter or longer waittime now?
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      > Overall this is a 
shorter waitime now.  Instead of 300 seconds it is now 20 seconds for Mach5 jobs (they are run with 
test.timeout.factor set to 4.0) and 5 seconds for regular jtreg runs.
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      > Best regards,
     >      >          >      >      >      >      >      > Daniil
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      > On 2/25/19, 4:38 PM, 
"Chris Plummer" mailto:[email protected] wrote:
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >      Hi Daniil,
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >      Yes, my point 
was that the max time you wait for a single event is much
     >      >          >      >      >      >      >      >      smaller now. I 
can see a possibility that with a little bit of network
     >      >          >      >      >      >      >      >      instability  a 
packet gets lost and resend does not happen fast enough.
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >      thanks,
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >      Chris
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >      On 2/25/19 
4:32 PM, Daniil Titov wrote:
     >      >          >      >      >      >      >      >      > Hi Chris,
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      > The code 
still waits for the whole total wait time. There is a while loop at lines 163-186 that keeps receiving new 
events (line 183) till elapsed time is less than the waittime (line 178) or a timeout happens (so eventSet 
is null).
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      > 159          
         begin = System.currentTimeMillis();
     >      >          >      >      >      >      >      >      >     160      
         eventSet = debugee.VM().eventQueue().remove(waitTime);
     >      >          >      >      >      >      >      >      >     161      
         delta = System.currentTimeMillis() - begin;
     >      >          >      >      >      >      >      >      >     162      
         totalWaitTime -= delta;
     >      >          >      >      >      >      >      >      >     163      
         while (eventSet != null) {
     >      >          >      >      >      >      >      >      >     164      
             EventIterator eventIterator = eventSet.eventIterator();
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >     178         
          if (totalWaitTime <= 0 || exit) {
     >      >          >      >      >      >      >      >      >     179      
                 break;
     >      >          >      >      >      >      >      >      >     180      
             }
     >      >          >      >      >      >      >      >      >     181      
             debugee.resume();
     >      >          >      >      >      >      >      >      >     182      
             begin = System.currentTimeMillis();
     >      >          >      >      >      >      >      >      >     183      
             eventSet = debugee.VM().eventQueue().remove(waitTime);
     >      >          >      >      >      >      >      >      >     184      
             delta = System.currentTimeMillis() - begin;
     >      >          >      >      >      >      >      >      >     185      
             totalWaitTime -= delta;
     >      >          >      >      >      >      >      >      >     186      
         }
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      > However, as 
I see now in case if a timeout happens on line 160  (eventSet is null) the loop is not executed at all.  I 
haven't observed it in test runs but I think it makes sense to adjust this test to take this potential 
case into account. I will send an updated version of the patch soon.
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      > Thanks!
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      > Best regards,
     >      >          >      >      >      >      >      >      > Daniil
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      > On 2/25/19, 12:21 PM, 
"Chris Plummer" mailto:[email protected] wrote:
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      Hi 
Daniil,
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      On 
2/23/19 1:02 PM, Daniil Titov wrote:
     >      >          >      >      >      >      >      >      >      > 
Please review the change that fixes timeout issues for the following 10 tests when running with jtreg and 
default timeout factor (1.0).
     >      >          >      >      >      >      >      >      >      In 
Utils.java, I think wait() should be moved right after
     >      >          >      >      >      >      >      >      >      
waitForCondition() and maybe given a more descriptive name. It seems to
     >      >          >      >      >      >      >      >      >      basically the 
same as waitForCondition(), except you added a "log"
     >      >          >      >      >      >      >      >      >      
parameter and slightly changed the behavior. Are these behavior
     >      >          >      >      >      >      >      >      >      
differences necessary? Could you share code with the existing
     >      >          >      >      >      >      >      >      >      
waitForCondition()?
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > For 
the following 2 tests the event wait timeout was reduced and adjusted for test.timeout.factor.  Method 
receiveEvents(long,pattern) was fixed to ensure that it gracefully exits after the specified wait period 
elapsed:
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/ClassUnloadRequest/addClassExclusionFilter/exclfilter001.java
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/ClassUnloadRequest/addClassFilter/filter001.java
     >      >          >      >      >      >      >      >      >        183   
              eventSet = debugee.VM().eventQueue().remove(waitTime);
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      This 
code used to wait for the total remaining waittime. Now it waits a
     >      >          >      >      >      >      >      >      >      fixed 
amount based on:
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >        153   
      long waitTime = Utils.adjustTimeout(1000);
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      How did 
you come up with this wait amount, and is it long enough to deal
     >      >          >      >      >      >      >      >      >      with 
occasional hiccups?
     >      >          >      >      >      >      >      >      >      > For 
these 3 tests the event wait timeout was reduced and adjusted for test.timeout.factor:
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/Event/_itself_/event001.java
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/VirtualMachine/suspend/suspend001/TestDescription.java
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/ThreadReference/suspend/suspend001.java
     >      >          >      >      >      >      >      >      >      So 
overall is this a shorter or longer waittime now?
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > For 
next 2 tests the event wait timeout and the thread sleep time were reduced and adjusted for 
test.timeout.factor. Additional synchronization between the debugger and the debuggee was added to ensure the 
debugee process continues as soon as the test finishes the timeout related checks and advances to the next 
steps:
     >      >          >      >      >      >      >      >      >      >    - 
vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l004/TestDescription.java
     >      >          >      >      >      >      >      >      >      >    - 
vmTestbase/nsk/jdi/EventQueue/remove/remove004/TestDescription.java
     >      >          >      >      >      >      >      >      >      Ok.
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > 
Instead of just sleeping for 5 minutes while waiting for the debuggee test thread to complete  the tests now 
check whether the debuggee thread is alive in the loop. The total waiting timeout was adjusted for 
test.timeout.factor:
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose004/TestDescription.java
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose003/TestDescription.java
     >      >          >      >      >      >      >      >      >      >    
-vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose002/TestDescription.java
     >      >          >      >      >      >      >      >      >      Ok.
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      thanks,
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      Chris
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > 
Testing.
     >      >          >      >      >      >      >      >      >      > The 
following VM options were used  in Mach5 jobs to  verify these changes:
     >      >          >      >      >      >      >      >      >      > 1. No 
VM args
     >      >          >      >      >      >      >      >      >      > 2. 
-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+TieredCompilation -XX:+UseJVMCICompiler 
-Djvmci.Compiler=grail
     >      >          >      >      >      >      >      >      >      > 3. 
-Xcomp
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > Also 
tier1, tier2 and tier3 Mach5 jobs succeeded.
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > To 
verify that tests succeed with test.timeout.factor set to 1.0 the following patch was used before running 
Mach5 jobs.
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > --- 
a/make/RunTests.gmk Thu Feb 21 15:17:42 2019 -0800
     >      >          >      >      >      >      >      >      >      > +++ 
b/make/RunTests.gmk Thu Feb 21 15:42:15 2019 -0800
     >      >          >      >      >      >      >      >      >      > @@ 
-826,6 +826,7 @@
     >      >          >      >      >      >      >      >      >      >     
else
     >      >          >      >      >      >      >      >      >      >       
JTREG_TIMEOUT_FACTOR ?= 4
     >      >          >      >      >      >      >      >      >      >     
endif
     >      >          >      >      >      >      >      >      >      > +  
JTREG_TIMEOUT_FACTOR = 1
     >      >          >      >      >      >      >      >      >      >     
JTREG_VERBOSE ?= fail,error,summary
     >      >          >      >      >      >      >      >      >      >     
JTREG_RETAIN ?= fail,error
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > Bug: 
https://bugs.openjdk.java.net/browse/JDK-8207367
     >      >          >      >      >      >      >      >      >      > 
Webrev: http://cr.openjdk.java.net/~dtitov/8207367/webrev.01
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      > 
Thanks!
     >      >          >      >      >      >      >      >      >      > 
--Daniil
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >      >
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >      >
     >      >          >      >      >      >      >
     >      >          >      >      >      >      >
     >      >          >      >      >      >      >
     >      >          >      >      >      >      >
     >      >          >      >      >      >      >
     >      >          >      >      >      >
     >      >          >      >      >      >
     >      >          >      >      >      >
     >      >          >      >      >      >
     >      >          >      >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >      >
     >      >          >      >
     >      >          >      >
     >      >          >      >
     >      >          >      >
     >      >          >      >
     >      >          >
     >      >          >
     >      >          >
     >      >          >
     >      >          >
     >      >
     >      >
     >      >
     >      >
     >      >
     >      >
     >
     >
     >
     >
     >


Reply via email to