[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Can't move temporary on update.

From: olli hauer <ohauer_at_gmx.de>
Date: Sun, 02 Mar 2014 13:21:49 +0100

On 2014-03-02 11:40, Stefan wrote:
> Hi,
>
> I came up with an even easier repro case. It seems to suffice to trigger the problem by simply committing the problematic file to an empty local repository and having avast installed.
> To whom should I send the repro-case (it requires the zipped-exe-file).
>

Hi Stefan,

if it works without installed avast or with a different virus scanner installed, then I suggest to open a ticket by avast.

>>
>> sry for the belated answer. It took me a while before I had some time to investigate that issue deeper.
>>
>> Following investigations were done with TSVN 1.8.5 (Subversion 1.8.8) and Server is now running Visual SVN 2.7.3 (based on SVN 1.8.5).
>>
>>>> I traced the issue down to obvious problems with a certain directory in the
>>>> repository. Ignoring/Skipping that directory and the check-out as well as the
>>>> update operation work fine.
>>>>
>>>> Looking into the .svn/tmp-directory I do see a single existing file:
>>>> trz2A87.tmp but obviously there's no trace of the mentioned svn-E78ED003 file.
>>> Can you possibly come up with a reproduction recipe that doesn't require access
>>> to your repo (unless of course your repo is publicly accessible)?
>> I hope to be able to try that out later today. But no promises.
>>
>>> The errors you're getting are coming from the run_file_install() step of the
>>> workqueue processor. It's rather hard to understand what's going just from the
>>> error messages. Based on what you're saying it seems like the temp file we're
>>> trying to move into place doesn't exist. Since looking at the code we try to
>>> install the file, and then trap a ENOENT error from the rename call. When the
>>> rename call fails with ENOENT we try to create the destination directory.
>>> Which fails and thus you see the errors.
>>>
>>> Right above the code generating the error it creates and writes the temp file.
>>> So I would expect to be seeing an error message from that if the file isn't
>>> being created.
>> I debugged the code directly and didn't run into the breakpoint I set in run_file_install().
>> The code-path which returns the error seems to be somewhere else in my case (or did I get u wrong here).
>> From what I can tell, it goes like this:
>> [...]
>> - svn_wc__db_pristine_install()
>> - calls: svn_io_file_rename()
>> - calls: svn_io_file_rename()
>> - calls: apr_file_rename(from_path_apr, to_path_apr, pool);
>> - calls: if (MoveFileExW(wfrompath, wtopath, MOVEFILE_REPLACE_EXISTING || MOVEFILE_COPY_ALLOWED))
>> That one returns a status code of 720,002. If I'm reading the APR-macros correctly, that corresponds to a window system error of 2 - which according to MSDN means: ERROR_FILE_NOT_FOUND.
>>
>> Setting a breakpoint right before that Move-call in apr_file_rename suggests it's trying to move the following file:
>> G:\Egosoft\X4\Source\.svn\tmp\svn-C5D6631B
>> to
>> G:\Egosoft\X4\Source\.svn\pristine\00\0077903324a83da0419971daeb632ff51529d320.svn-base
>>
>> Looking at the .svn/tmp-directory I do see that a file with the expected file contents was created, but is named differently:
>> trz5B5.tmp
>>
>> From that point, it's obvious that the move-call would fail, since the given filename seems to differ from that on the disk.
>>
>> Taking ur statement into account I assume that SVN tries to actually put a differently named file into that folder and somehow that one seems to get mangled on my system to a different filename.
>> If so, I could try to debug the code a bit further. Would u have the function for me I'd investigate to trace down where the temp-file would be created?
>>
>>> One question I do have is have you done anything unusual with how your file
>>> system is setup? The .svn/tmp directory needs to be on the same file system as
>>> the rest of the working copy since we're doing atomic renames to put files into
>>> place.
>> There's nothing special from the file system set-up point of view. The drive is a simple local partition on an IDE drive. There are no symlinks or somesuch in place. File system is NTFS. The issue is reproducible on two different machines, both running Avast Antivirus. I don't know much about the set-up on the other machine, but I would expect it's somehow the same.
>>
>>>>> we recently started getting this error when trying to update or check-out a
>>>>> repository.
>>>>> Weird thing is that the issue only occurs when we try to check-out/update the
>>>>> thing externally (meaning via VPN).
>>> So same machine, same working copy doesn't work over the VPN but does without a
>>> VPN? Is the working copy perhaps on a network filesystem?
>> No, sry, wasn't clear enough. We didn't test whether it's at all related to a VPN-connection. We can't atm test it without a VPN connection to test whether it's at all related to that. I'll try to do a local set-up of a working copy to see whether it's reproducible in that environment too. Can't tell atm when I got the time to get it done, but might have a few minutes left today. Let's see.
>>
>> Regards,
>> Stefan
>>
>
>
Received on 2014-03-02 13:22:20 CET

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.