RFR(XS): 8189213: [TESTBUG] Running jtreg tests on machine without docker shows extra message
Mikhailo Seledtsov
mikhailo.seledtsov at oracle.com
Tue Nov 7 04:06:53 UTC 2017
Thank you David,
I will make changes and post an updated webrev.
Misha
On 11/6/17, 5:34 PM, David Holmes wrote:
> Hi Misha,
>
> This seems reasonable.
>
> Thanks,
> David
>
> On 7/11/2017 8:42 AM, mikhailo wrote:
>> Hi David,
>>
>>
>> On 11/05/2017 07:28 PM, David Holmes wrote:
>>> Hi Misha,
>>>
>>> On 4/11/2017 10:21 AM, Mikhailo Seledtsov wrote:
>>>> Hi David,
>>>>
>>>> Updated webrev: http://cr.openjdk.java.net/~mseledtsov/8189213.01/
>>>>
>>>> Please see my comments below.
>>>>
>>>> On 11/2/17, 6:02 PM, David Holmes wrote:
>>>>> Hi Misha,
>>>>>
>>>>> On 3/11/2017 10:22 AM, mikhailo wrote:
>>>>>> Hi David,
>>>>>>
>>>>>> Thank you for taking a look at this change.
>>>>>>
>>>>>>
>>>>>> On 11/02/2017 04:47 PM, David Holmes wrote:
>>>>>>> Hi Misha,
>>>>>>>
>>>>>>> I don't see anything else in VMProps that writes anything out so
>>>>>>> to me the fix is to delete the System.err.println completely.
>>>>>> Removal is an option, and seems a simpler one. However, we will
>>>>>> loose the diagnostic information.
>>>>>> On the other hand, if an issue arises on a specific host or
>>>>>> system, I can patch this file with extra trace statements, and
>>>>>> diagnose the failure that way.
>>>>>> If you think removing the print statement is a better option, and
>>>>>> I do not hear objections or other opinions, I can just remove the
>>>>>> print statement.
>>>>>
>>>>> Delete please :)
>>>>>
>>>> Done.
>>>>>>> That said I did not look at this in the past but I feel the
>>>>>>> whole docker test here is not really appropriate/suitable to
>>>>>>> always be run on linux-x64. It has to exec another process and
>>>>>>> wait up to 10 seconds to get a result! Can't this actually be
>>>>>>> done via a WhiteBox check once Bob's container support updates
>>>>>>> are in place?
>>>>>> Actually, WhiteBox is not necessary for such check. The ability
>>>>>> to run docker on a given host/node can be determined in a body of
>>>>>> a jtreg test, via a test utility. In fact, that was my original
>>>>>> intent. When this change was presented for a discussion, this
>>>>>> aspect was debated and reviewers have reached a consensus to do
>>>>>> such check in VMProps.java. We mainly discussed within VM SQE
>>>>>> team. The main argument was that using @requires is a more proper
>>>>>> way of "skipping" the test(s) on unsupported environments, rather
>>>>>> then checking this in the body of the test and then returning.
>>>>>> When using @requires, the test execution system will report the
>>>>>> test as "not run". When skipping the test using "return" from the
>>>>>> body of a test, the execution system will report test as "ran"
>>>>>> and passed; jtreg does not yet support the "skipped" state.
>>>>>>
>>>>>> Unfortunately, the way our "@requires" mechanism works is that it
>>>>>> runs each time prior to starting a test run, even if the test
>>>>>> being run is not concerned with a specific property. It was my
>>>>>> concern that this could be a burden on the test run startup, but
>>>>>> I eventually agreed to the opinion of other reviewers.
>>>>>>
>>>>>> If you have a strong opinion or concern about this, let me know.
>>>>>> However, I am not sure what is the best process to use to
>>>>>> overturn a decision on a prior review or design discussion. I
>>>>>> guess one option is to file a bug or an RFE, and bring it up for
>>>>>> a discussion.
>>>>>
>>>>> Yes let's file a bug/RFE. VMProps can use WhiteBox and I think
>>>>> using WhiteBox connected to Bob's new container support code is
>>>>> better than exec'ing a separate process (which I'm not even sure
>>>>> what it does).
>>>> I have filed a bug: "JDK-8190730 - [TESTBUG] Calling 'docker ps'
>>>> from VMProps.java to determine presence of docker engine is deemed
>>>> too heavy"
>>>>
>>>> Also, in current webrev, I though I could do something quick and
>>>> easy to address your concerns, before we discuss and agree on a
>>>> final solution.
>>>> I have timed running "docker ps" on 2 different hosts, 30 times
>>>> each. I saw a spread between 20ms to 150ms, mostly centered around
>>>> 30ms. Hence, I reduced the timeout in the VMProps.java from 10 sec
>>>> to 500ms. I thought 500 ms gives enough time cushion for slower
>>>> test nodes/hosts.
>>>
>>> I think a slowness would arise on systems that do not have docker
>>> installed. If I time "docker ps" on my system I get
>>>
>>> > time docker ps
>>> The program 'docker' is currently not installed. To run 'docker'
>>> please ask your administrator to install the package 'docker'
>>>
>>> real 0m4.103s
>>> user 0m0.044s
>>> sys 0m0.036s
>>>
>>> but the second call is much quicker:
>>>
>>> > time docker ps
>>> The program 'docker' is currently not installed. To run 'docker'
>>> please ask your administrator to install the package 'docker'
>>>
>>> real 0m0.078s
>>> user 0m0.052s
>>> sys 0m0.012s
>>>
>>> It may well depend on the user's path. If "docker" is present early
>>> in the path then it will be found and executed quickly, but if not
>>> present, or if further down the path it may take a while to occur.
>>>
>>> So I think the timeout change, as a short term proposal, may be more
>>> risky and so not worthwhile.
>>>
>>> I'd prefer to see the whole "docker ps" disappear altogether. Such
>>> an approach is not scalable if there may be different container
>>> systems.
>> I have discussed this topic again with Igor and Leonid, and explained
>> your concerns.
>>
>>
>> We came up with alternative ideas:
>>
>> 1. VMProps.java will check the existence of docker on a given test
>> machine. We will look at "/bin/docker", "/usr/bin/docker",
>> "/usr/local/bin/docker"
>> For now we only support Linux x64. If any of these files exist,
>> we return 'true' for a corresponding at-requires property, otherwise
>> false.
>>
>> 2. In case someone wishes to specify a custom location for a docker
>> binary, we thought we could use a property for that:
>> jdk.test.lib.docker.path=""
>> If this property is specified, VMProps.java will check the
>> docker at that location.
>>
>> 3. No more "docker ps" execution in VMProps.java.
>>
>> Please let me know what you think.
>>
>>
>>
>> Thank you,
>> Misha
>>
>>>
>>> Thanks,
>>> David
>>>
>>>> Let me know what you think. I can revert this part of the change or
>>>> reduce the timeout value a bit more.
>>>>
>>>> Thank you,
>>>> Misha
>>>>>
>>>>>>
>>>>>> For this change under review, if I do not hear opinions from
>>>>>> other reviewers, I can simply delete the print statement.
>>>>>
>>>>> Sounds good to me.
>>>>>
>>>>> Thanks,
>>>>> David
>>>>>
>>>>>>
>>>>>> Thank you,
>>>>>> Misha
>>>>>>>
>>>>>>> Thanks,
>>>>>>> David
>>>>>>>
>>>>>>> On 3/11/2017 7:03 AM, mikhailo wrote:
>>>>>>>> Please review this simple change that makes the error message
>>>>>>>> in jtreg-ext/requires/VMProps.java conditional
>>>>>>>> on java property "vmprops.trace.verbose". W/o this condition an
>>>>>>>> error message is printed each time any jtreg
>>>>>>>> test is ran, including non-docker tests.
>>>>>>>>
>>>>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8189213
>>>>>>>> Webrev: http://cr.openjdk.java.net/~mseledtsov/8189213.00/
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ======= Background and details:
>>>>>>>> VMProps.java is called for each test run of jtreg (be it a run
>>>>>>>> containing a singe test or multiple tests).
>>>>>>>> VMProps evaluates the @requires properties. Therefore, in case
>>>>>>>> of this bug, any time a user runs any jtreg VM test
>>>>>>>> on a machine w/o an operational docker engine, this error will
>>>>>>>> pop up.
>>>>>>>> The fix makes printing of this error message conditional, off
>>>>>>>> by default. The message can be turend on
>>>>>>>> via a property vmprops.trace.verbose when detailed diagnostic
>>>>>>>> info is desired.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ======== Testing:
>>>>>>>> Local testing:
>>>>>>>> W/o docker present:
>>>>>>>> jtreg <arbitrary-jtreg-test>
>>>>>>>> No error message
>>>>>>>> jtreg -Dvmprops.trace.verbose=true <arbitrary-jtreg-test>
>>>>>>>> Detailed error message
>>>>>>>> jtreg DockerBasicTest.java
>>>>>>>> Test skipped
>>>>>>>>
>>>>>>>> With docker installed but no permissions:
>>>>>>>> jtreg <arbitrary-jtreg-test>
>>>>>>>> No error message
>>>>>>>> jtreg -Dvmprops.trace.verbose=true <arbitrary-jtreg-test>
>>>>>>>> Detailed error message
>>>>>>>> jtreg DockerBasicTest.java
>>>>>>>> Test skipped
>>>>>>>>
>>>>>>>> With docker installed and operational:
>>>>>>>> jtreg <arbitrary-jtreg-test>
>>>>>>>> No error message
>>>>>>>> jtreg -Dvmprops.trace.verbose=true <arbitrary-jtreg-test>
>>>>>>>> No error message
>>>>>>>> jtreg DockerBasicTest.java
>>>>>>>> Test passed
>>>>>>>>
>>>>>>>> Testing via automated distributed test system:
>>>>>>>> - tier1
>>>>>>>> - docker tests
>>>>>>>> In progress
>>>>>>>>
>>>>>>>>
>>>>>>>> Thank you,
>>>>>>>> Misha
>>>>>>>>
>>>>>>
>>
More information about the hotspot-runtime-dev
mailing list