RFR of 8194284: CheckRegisterInLog.java fails with java.lang.RuntimeException: CheckRegisterInLog got exception timeout 6480000ms out of range

David Holmes david.holmes at oracle.com
Thu Jan 18 09:07:10 UTC 2018


On 18/01/2018 6:05 PM, Hamlin Li wrote:
> On 18/01/2018 3:48 PM, David Holmes wrote:
>> On 18/01/2018 5:41 PM, Hamlin Li wrote:
>>> Hi David,
>>>
>>> Sometime we will run test by command "jtreg -timeoutFactor:xxx ...", xxx 
>>
>> Yes but that controls how jtreg manages the execution of the test.
> right.
>> How is that then being used by the tests that call TestDriver?
> I assume you mean TestLibrary rather than TestDriver.

Yes - sorry.

> If you follow the code in RMID.java, you will find following code, it 
> calculates the timeout value by timeoutFactor value.
> 
>          long waitTime = (long)(240_000 * TestLibrary.getTimeoutFactor());
>          restartTimeout = (long)(waitTime * 0.9);
>> Further if TestDriver limits the timeout to a smaller value, then the 
>> increase in timeoutFactor won't help at all - people will see a 
>> timeout, increase the timeoutFactor and still see a timeout!
> No, by pass a large timeoutFactor value, I will get test passed rather 
> than get timeout exception.

Sorry you are right - the timeout is limited before scaling by the 
timeout-factor, so it will increase. Though it's possible for the 
resulting scaled timeout to still be smaller than the original requested 
one.

But the exception is telling you there is a mismatch between the timing 
expectations of the caller and the actual behaviour in TestLibrary. 
Simply placing a ceiling on the timeout value doesn't fix that mismatch.

I don't see any point in computeDeadline imposing an arbitrary maximum 
timeout of 1 hour. (Though it concerns me that tests are trying to set 
timeouts even longer than an hour!)

David
-----

>>
>> For that matter why is TestDriver even imposing a timeout of its own 
>> when jtreg imposes an overall timeout?
> It's a history topic, if it's necessary we could file another 
> enhancement or bug to track it.
>> In general we have been moving away from test initiated timeouts and 
>> letting the test harness handle it.
> Yes, I agree, that's the reason I refactor it to round down the timeout 
> to MAX_TIMEOUT_MS rather than throw an exception by test itself.
> 
> Thank you
> -Hamlin
>>
>> Cheers,
>> David
>>
>>> may be a large number than usual, e.g. 100. The reason we supply a 
>>> large number for timeoutFactor is because we're running test on a 
>>> very slow machine, or we're running test on a docker environment 
>>> which has very limited resource, without a large timeoutFactor value, 
>>> the test will finally get timeout exception. At this situation, it's 
>>> NOT reasonable for user to know the exact timeoutFactor by which the 
>>> calculated result will be MAX_TIMEOUT_MS, what's helpful is to let 
>>> user supply a large enough timeoutFactor value and round down the 
>>> timeout value to MAX_TIMEOUT_MS automatically, rather than throw an 
>>> exception.
>>>
>>> Thank you
>>>
>>> -Hamlin
>>>
>>>
>>> On 18/01/2018 3:15 PM, David Holmes wrote:
>>>> Hi Hamlin,
>>>>
>>>> This should probably be reviewed on core-libs-dev. I don't think 
>>>> jdk-dev is intended for code reviews.
>>>>
>>>> On 18/01/2018 4:59 PM, Hamlin Li wrote:
>>>>> Would you please review the following patch?
>>>>>
>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8194284
>>>>>
>>>>> webrev as below.
>>>>
>>>> I don't agree with this. Whatever is passing the incorrect timeout 
>>>> to the TestLibrary should be fixed. The bug report needs more 
>>>> information about where the incorrect value is coming from and why.
>>>>
>>>> Cheers,
>>>> David
>>>>
>>>>>
>>>>> Thank you
>>>>>
>>>>> -Hamlin
>>>>>
>>>>> ------------------------------------------------------------------------ 
>>>>>
>>>>>
>>>>> diff -r 0dec8c41170c test/jdk/java/rmi/testlibrary/TestLibrary.java
>>>>> --- a/test/jdk/java/rmi/testlibrary/TestLibrary.java    Wed Jan 17 
>>>>> 20:07:50 2018 -0800
>>>>> +++ b/test/jdk/java/rmi/testlibrary/TestLibrary.java    Thu Jan 18 
>>>>> 14:54:50 2018 +0800
>>>>> @@ -188,8 +188,12 @@
>>>>>       public static long computeDeadline(long timestamp, long 
>>>>> timeout) {
>>>>>           final long MAX_TIMEOUT_MS = 3_600_000L;
>>>>>
>>>>> -        if (timeout < 0L || timeout > MAX_TIMEOUT_MS) {
>>>>> +        if (timeout < 0L) {
>>>>>               throw new IllegalArgumentException("timeout " + 
>>>>> timeout + "ms out of range");
>>>>> +        } else if (timeout > MAX_TIMEOUT_MS) {
>>>>> +            System.out.format("timeout value(%d) exceeds 
>>>>> MAX_TIMEOUT_MS(%d), "
>>>>> +                    + "use MAX_TIMEOUT_MS instead!%n", timeout, 
>>>>> MAX_TIMEOUT_MS);
>>>>> +            timeout = MAX_TIMEOUT_MS;
>>>>>           }
>>>>>
>>>>>           return timestamp + (long)(timeout * getTimeoutFactor());
>>>>>
>>>
> 


More information about the core-libs-dev mailing list