RFR: JDK-8158066: SourceDebugExtensionTest fails to rename file
Daniel D. Daugherty
daniel.daugherty at oracle.com
Thu Jan 17 15:40:42 UTC 2019
On re-reading this thread, I realized that my concern about:
> rename A to A1
was not clear. I'm wasn't worried about the virus scanner having file
A1 open. I was worried about the virus scanner having file A open and
preventing the rename from happening. I have a vague memory of this
happening a long time (so very old Win* versions).
We should still give this work around a try and keep an eye on any
failures...
Dan
On 1/16/19 12:10 PM, Daniel D. Daugherty wrote:
>> Do you have any specific references to "renames on Windows"
>> restrictions?
>
> Not at my fingertips. Sorry.
>
>
>> Should we hold back on the "rename A to A1" workaround?
>
> No. Let's give a try and see if it helps improve things.
>
> Dan
>
>
>
> On 1/16/19 11:59 AM, Gary Adams wrote:
>> The interference of a virus scanner for
>>
>> delete A
>> rename C to A
>>
>> makes sense, if the original A is not completely deleted
>> when the rename is requested.
>>
>> For the suggested replacement
>>
>> rename A to A1
>>
>> The file A1 does not exist so there is no collision taking place.
>> If a virus scanner was holding a reference to A1, it
>> would not collide with the
>>
>> rename C to A
>>
>> There were no failures during testing with the fix in place.
>>
>> Do you have any specific references to "renames on Windows"
>> restrictions?
>>
>> Should we hold back on the "rename A to A1" workaround?
>>
>> Another possibility is to use the newer Windows MoveFile function...
>>
>>
>> On 1/16/19, 11:24 AM, Daniel D. Daugherty wrote:
>>> > rename A to A1
>>>
>>> I believe the virus scanner will also mess with file renames on Win*
>>> so you may see intermittent failures for this operation.
>>>
>>> Dan
>>>
>>>
>>> On 1/11/19 11:01 AM, Gary Adams wrote:
>>>> I've been reading recently that Windows delete file operations
>>>> can be delayed, if there are open handles against the file.
>>>> Others have reported virus checkers or other indexing
>>>> programs may hold a handle on a file preventing the
>>>> deletion being completed.
>>>>
>>>> The basic logic in InstallSDE is
>>>> A + B = C
>>>> delete A
>>>> rename C to A
>>>>
>>>> I think we can work around the issue with
>>>> rename A to A1
>>>> A1 + B = C
>>>> delete A1
>>>> rename C to A
>>>>
>>>> diff --git a/test/jdk/com/sun/jdi/sde/InstallSDE.java
>>>> b/test/jdk/com/sun/jdi/sde/InstallSDE.java
>>>> --- a/test/jdk/com/sun/jdi/sde/InstallSDE.java
>>>> +++ b/test/jdk/com/sun/jdi/sde/InstallSDE.java
>>>> @@ -31,9 +31,17 @@
>>>> }
>>>>
>>>> static void install(File inOutClassFile, File attrFile) throws
>>>> IOException {
>>>> - File tmpFile = new File(inOutClassFile.getPath() + "tmp");
>>>> - new InstallSDE(inOutClassFile, attrFile, tmpFile);
>>>> - if (!inOutClassFile.delete()) {
>>>> + File tmpFile = new File(inOutClassFile.getPath() +
>>>> "tmp-out");
>>>> + File tmpInOutClassFile = new File(inOutClassFile.getPath()
>>>> + "tmp-in");
>>>> +
>>>> + // Workaround delayed file deletes on Windows using a tmp
>>>> file name
>>>> + if (!inOutClassFile.renameTo(tmpInOutClassFile)) {
>>>> + throw new IOException("tmp copy of inOutClassFile
>>>> failed");
>>>> + }
>>>> +
>>>> + new InstallSDE(tmpInOutClassFile, attrFile, tmpFile);
>>>> +
>>>> + if (!tmpInOutClassFile.delete()) {
>>>> throw new IOException("inOutClassFile.delete() failed");
>>>> }
>>>> if (!tmpFile.renameTo(inOutClassFile)) {
>>>>
>>>>
>>>> Testing in progress ...
>>>>
>>>> On 1/11/19, 7:40 AM, David Holmes wrote:
>>>>> Hi Gary,
>>>>>
>>>>> On 11/01/2019 9:22 pm, gary.adams at oracle.com wrote:
>>>>>> After ~1000 testruns I hit a failure in MangleTest and a jtreg
>>>>>> agent communication issue with SourceDebugExtension.
>>>>>>
>>>>>> https://java.se.oracle.com:10065/mdash/builds/2019-01-10-1159535.gary.adams.jdk-jdb/results?search=status%3Afailed%20AND%20-state%3Ainvalid
>>>>>>
>>>>>>
>>>>>>
>>>>>> *java.io.IOException: tmpFile.renameTo(inOutClassFile) failed*
>>>>>> at InstallSDE.install(InstallSDE.java:40)
>>>>>> at MangleTest.testSetUp(MangleTest.java:38)
>>>>>> at MangleTest.main(MangleTest.java:31)
>>>>>
>>>>> You might want to add some code in:
>>>>>
>>>>> ./java.base/windows/native/libjava/WinNTFileSystem_md.c:Java_java_io_WinNTFileSystem_rename0
>>>>>
>>>>>
>>>>> that checks the result of _wrename to see what error is occurring.
>>>>> I suspect it will be EACCES which won't be that helpful:
>>>>>
>>>>> https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/rename-wrename?view=vs-2017
>>>>>
>>>>>
>>>>> but it would be good to confirm.
>>>>>
>>>>>>
>>>>>> result: Error. Agent communication error:
>>>>>> java.io.IOException:*Agent: unexpected op: 71;* check console
>>>>>> log for any additional details
>>>>>>
>>>>>> I added some additional print outs for the rename issue and have
>>>>>> run ~2000 additional
>>>>>> testruns with no test failures repeated, yet. But there were 2
>>>>>> mach5 reported errors:
>>>>>>
>>>>>> TimeoutException in CLEANUP.
>>>>>
>>>>> That's a mach5 issue.
>>>>>
>>>>> David
>>>>>
>>>>>>
>>>>>> I'll do some more investigation with making the rename operation
>>>>>> more robust
>>>>>> before removing SourceDebugExtensionTest from the problem list.
>>>>>>
>>>>>> On 1/10/19 8:28 PM, David Holmes wrote:
>>>>>>> Hi Gary,
>>>>>>>
>>>>>>> On 10/01/2019 11:02 pm, gary.adams at oracle.com wrote:
>>>>>>>> SourceDebugExtensionTest was placed on the ProblemList
>>>>>>>> because of filesystem rename issues on Windows 2012 test systems.
>>>>>>>> The test does not appear to fail on the current mach5 test
>>>>>>>> systems.
>>>>>>>> There was some question concerning symbolic links that might have
>>>>>>>> been problematic at that time. Additional testing in progress...
>>>>>>>
>>>>>>> Also note that there are two sets of SDE related tests and two
>>>>>>> versions of the InstallSDE.java file that both use renameTo. In
>>>>>>> nsk the testcase seems to be:
>>>>>>>
>>>>>>> ./hotspot/jtreg/vmTestbase/vm/mlvm/share/StratumClassesBuilder.java
>>>>>>>
>>>>>>> and AFAICS it is not excluded. So removing the exclusion seems
>>>>>>> reasonable to me. It was most like a concurrency issue with the
>>>>>>> virus scanner.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> David
>>>>>>>
>>>>>>>
>>>>>>>> Issue: https://bugs.openjdk.java.net/browse/JDK-8158066
>>>>>>>>
>>>>>>>> diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt
>>>>>>>> --- a/test/jdk/ProblemList.txt
>>>>>>>> +++ b/test/jdk/ProblemList.txt
>>>>>>>> @@ -838,8 +838,6 @@
>>>>>>>>
>>>>>>>> com/sun/jdi/RepStep.java 8043571 generic-all
>>>>>>>>
>>>>>>>> -com/sun/jdi/sde/SourceDebugExtensionTest.java 8158066 windows-all
>>>>>>>> -
>>>>>>>> com/sun/jdi/NashornPopFrameTest.java 8187143 generic-all
>>>>>>>>
>>>>>>
>>>>
>>>
>>
>
>
More information about the serviceability-dev
mailing list