RFR: JDK-8213214: Set -Djava.io.tmpdir= when running tests
Erik Joelsson
erik.joelsson at oracle.com
Wed Jun 17 13:11:54 UTC 2020
On 2020-06-16 23:25, Sergey Bylokhov wrote:
> As far as I understand this new temp folder will be cleaned after every
> tests run, doesn't it look like a workaround for problematic tests and
> product bugs?
This new tmp folder is created in the jtreg test-support dir (which is
where we direct the jtreg work dir). It's global for one invocation of
jtreg. This work dir is cleaned and recreated before a test is run from
the makefiles. In the local developer case, this means it will stay
around until you run the same set of tests again, manually delete it, or
you run "make clean". In a distributed test environment, it will stay
around until the distributed system decided to clean up the test
workspace. Like for any artifact created by tests, this is exactly what
we want.
> Personally, I found many bugs in the tests and some product bugs as
> well, which caused "leakage" of the temporary files.
>
If tests are allowed to write files anywhere outside of the test
workspace, then they will eventually leak those files, regardless of how
well implemented the test is, because tests can fail and crash. If tests
couldn't fail, there would be no reason to run them. When running
millions of tests every day, those failures add up and fill up disks.
> Probably additionally to this fix we should personalise every temp
> file created in the test context via createTempFile or similar API and
> report the test as failed if the file was not removed at the end?
>
In my opinion, there is very rarely a reason to use createTempFile in a
test. When trying to investigate a failed test, I always much prefer
tests that create explicit files in an assigned sandbox/workdir and
leaving them behind for later inspection. I rather employ a clean first
strategy (as we do with the workdir from the makefiles), where the test
is aware that a previous run may have left files around in the known
locations and deletes them first. As long as these files aren't adding
up to outrageous amounts of data of course.
/Erik
> On 6/16/20 3:53 pm, Jonathan Gibbons wrote:
>> It would also be good to identify the tests that are using temporary
>> directories in this manner and have them use the jtreg scratch
>> directory where possible.
>>
>> -- Jon
>>
>> On 6/16/20 12:22 PM, Erik Joelsson wrote:
>>> (re-sending this as it doesn't look like it was delivered)
>>>
>>> There are a lot of jtreg tests that use temporary files. These
>>> temporary files add up over time and fill up the global temp
>>> directories on our test systems. To tackle this, we should try to
>>> redirect these temporary files into a directory controlled by the
>>> test framework. Jtreg does not do this, but we can set
>>> -Djava.io.tmpdir from RunTest.gmk. This will not prevent all temp
>>> files from being created outside of the work dir, but at least most.
>>>
>>>
>>> I have found one test where this becomes an issue,
>>> java/nio/file/Path/Misc.java on Windows when running in elevated
>>> mode with the workspace on a subst drive. This looks like an actual
>>> issue in the product, so I have filed a separate bug for it [1].
>>> Since we currently use subst in our distributed test system to get
>>> around Windows path length issues, we are hitting this problem.
>>> While the bug is being evaluated, I have implemented a workaround in
>>> the test so that it is able to handle the known situation. I would
>>> like to have someone from core-libs look at the workaround.
>>>
>>> Webrev: http://cr.openjdk.java.net/~erikj/8213214/webrev.01/
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8213214
>>>
>>> /Erik
>>>
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8213216
>>>
>>>
>
>
More information about the build-dev
mailing list