threads / discuss / 34358

git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

Subject: git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

## tl;dr

7 messages between Jul 5, 2013 and Jul 6, 2013.

replies: 6people: 2as markdown or json

David Rothenberger· Jul 5, 2013, 20:48 UTC · lore

I recently upgraded my Subversion server to 1.8.0 and started receiving the following error from "git svn fetch":

Temp file with moniker 'svn_delta' already in use at /usr/lib/perl5/vendor_perl/5.10/Git.pm line 1024.
This occurs only when using an http:// URL; svn:// URLs work fine.

I think this is related to skelta mode [1] with serf. When I add "SVNAllowBulkUpdates Prefer" to mod_dav configuration, the error goes away. (Similarly, if I add "http-bulk-updates = yes" to ~/.subversion/servers.)

The server is running WanDisco's 1.8.0 distribution on 64-bit Debian 7.0. The client is Cygwin: svn version 1.8.0 and git version 1.8.3.2.

I initially reported this to the subversion users mailing list, but was (not so politely) told to report this to the git-svn authors. I'm not so sure, since the problem goes away simply by downgrading the subversion-perl bindings back to 1.7.

[1] http://subversion.apache.org/docs/release-notes/1.8.html#serf-skelta-default
-- 
David Rothenberger  ----  daveroth@acm.org

Teutonic:
        Not enough gin.
Kyle McKay· Jul 5, 2013, 22:58 UTC · re: David Rothenberger · lore

Re: git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

On Jul 5, 2013, at 13:48, David Rothenberger wrote:
Show 7 quoted lines
> I recently upgraded my Subversion server to 1.8.0 and started
> receiving the following error from "git svn fetch":
>
> Temp file with moniker 'svn_delta' already in use at /usr/lib/perl5/ 
> vendor_perl/5.10/Git.pm line 1024.
>
> This occurs only when using an http:// URL; svn:// URLs work fine.
[snip]
> The client is Cygwin: svn version 1.8.0 and git version
> 1.8.3.2.

The subversion 1.8 release has removed the neon library, all svn client http access now always goes through the serf library. If you put "http-library = serf" in the "[global]" section of the "~/.subversion/servers" file you will get the 'svn_delta' error with git-svn when running earlier versions of the svn client as well.

> I initially reported this to the subversion users mailing list, but
> was (not so politely) told to report this to the git-svn authors.
> I'm not so sure, since the problem goes away simply by downgrading
> the subversion-perl bindings back to 1.7.

That changes the default http client access back to neon which doesn't exhibit the problem. Adding "http-library = serf" as described above will make the problem reappear with the 1.7 subversion-perl bindings (and the 1.6 as well).

Kyle
David Rothenberger· Jul 5, 2013, 23:07 UTC · re: Kyle McKay · lore

Re: git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

On 7/5/2013 3:58 PM, Kyle McKay wrote:
Show 17 quoted lines
> On Jul 5, 2013, at 13:48, David Rothenberger wrote:
>> I recently upgraded my Subversion server to 1.8.0 and started
>> receiving the following error from "git svn fetch":
>>
>> Temp file with moniker 'svn_delta' already in use at
>> /usr/lib/perl5/vendor_perl/5.10/Git.pm line 1024.
>>
>> This occurs only when using an http:// URL; svn:// URLs work fine.
> [snip]
>> The client is Cygwin: svn version 1.8.0 and git version
>> 1.8.3.2.
> 
> The subversion 1.8 release has removed the neon library, all svn client
> http access now always goes through the serf library.  If you put
> "http-library = serf" in the "[global]" section of the
> "~/.subversion/servers" file you will get the 'svn_delta' error with
> git-svn when running earlier versions of the svn client as well.

That was not my experience. I did try this with the 1.7 perl bindings and libraries and with "http-library = serf" in by servers and it worked fine. I confirmed that serf was being used with a Wireshark trace.

-- 
David Rothenberger  ----  daveroth@acm.org

To downgrade the human mind is bad theology.
                -- C. K. Chesterton
Kyle McKay· Jul 6, 2013, 01:01 UTC · re: David Rothenberger · lore

Re: git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

On Jul 5, 2013, at 16:07, David Rothenberger wrote:
Show 24 quoted lines
> On 7/5/2013 3:58 PM, Kyle McKay wrote:
>> On Jul 5, 2013, at 13:48, David Rothenberger wrote:
>>> I recently upgraded my Subversion server to 1.8.0 and started
>>> receiving the following error from "git svn fetch":
>>>
>>> Temp file with moniker 'svn_delta' already in use at
>>> /usr/lib/perl5/vendor_perl/5.10/Git.pm line 1024.
>>>
>>> This occurs only when using an http:// URL; svn:// URLs work fine.
>> [snip]
>>> The client is Cygwin: svn version 1.8.0 and git version
>>> 1.8.3.2.
>>
>> The subversion 1.8 release has removed the neon library, all svn  
>> client
>> http access now always goes through the serf library.  If you put
>> "http-library = serf" in the "[global]" section of the
>> "~/.subversion/servers" file you will get the 'svn_delta' error with
>> git-svn when running earlier versions of the svn client as well.
>
> That was not my experience. I did try this with the 1.7 perl bindings
> and libraries and with "http-library = serf" in by servers and it  
> worked
> fine. I confirmed that serf was being used with a Wireshark trace.

I had it always fail right away from my home ISP (kinda slow connection), but when running on a host with quite a different internet connection it would sometimes run for a while before generating the error (maybe a couple hundred revisions fetched) for some sources, but it would *always* eventually fail.

For this reason I also believe the problem is timing sensitive.

Try doing "git svn clone --quiet http://dev.heuristiclab.com/svn/hl/ core" with "~/.subversion/servers" section "[global]" including "http_library = serf". I find this one always seems to fail right away for me with git-svn over serf but will clone fine over neon (if you can stand to wait long enough).

I have been looking into using serf for git-svn clones ever since I discovered how very much faster snvrdump works on an http url over serf as compared to neon.

Kyle
David Rothenberger· Jul 6, 2013, 02:02 UTC · re: Kyle McKay · lore

Re: git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

On 7/5/2013 6:01 PM, Kyle McKay wrote:
Show 37 quoted lines
> On Jul 5, 2013, at 16:07, David Rothenberger wrote:
>> On 7/5/2013 3:58 PM, Kyle McKay wrote:
>>> On Jul 5, 2013, at 13:48, David Rothenberger wrote:
>>>> I recently upgraded my Subversion server to 1.8.0 and started
>>>> receiving the following error from "git svn fetch":
>>>>
>>>> Temp file with moniker 'svn_delta' already in use at
>>>> /usr/lib/perl5/vendor_perl/5.10/Git.pm line 1024.
>>>>
>>>> This occurs only when using an http:// URL; svn:// URLs work fine.
>>> [snip]
>>>> The client is Cygwin: svn version 1.8.0 and git version
>>>> 1.8.3.2.
>>>
>>> The subversion 1.8 release has removed the neon library, all svn client
>>> http access now always goes through the serf library.  If you put
>>> "http-library = serf" in the "[global]" section of the
>>> "~/.subversion/servers" file you will get the 'svn_delta' error with
>>> git-svn when running earlier versions of the svn client as well.
>>
>> That was not my experience. I did try this with the 1.7 perl bindings
>> and libraries and with "http-library = serf" in by servers and it worked
>> fine. I confirmed that serf was being used with a Wireshark trace.
> 
> I had it always fail right away from my home ISP (kinda slow
> connection), but when running on a host with quite a different internet
> connection it would sometimes run for a while before generating the
> error (maybe a couple hundred revisions fetched) for some sources, but
> it would *always* eventually fail.
> 
> For this reason I also believe the problem is timing sensitive.
> 
> Try doing "git svn clone --quiet
> http://dev.heuristiclab.com/svn/hl/core" with "~/.subversion/servers"
> section "[global]" including "http_library = serf".  I find this one
> always seems to fail right away for me with git-svn over serf but will
> clone fine over neon (if you can stand to wait long enough).

Yes, you're right. That one fails for me too with 1.7, although I note that the server itself is running 1.5. Still, the reason is the same -- a non-depth-first drive of the delta editor from serf.

-- 
David Rothenberger  ----  daveroth@acm.org

"If Diet Coke did not exist it would have been necessary to invent it."
                -- Karl Lehenbauer
David Rothenberger· Jul 5, 2013, 23:14 UTC · re: David Rothenberger · lore

Re: git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

On 7/5/2013 1:48 PM, David Rothenberger wrote:
Show 6 quoted lines
> I recently upgraded my Subversion server to 1.8.0 and started
> receiving the following error from "git svn fetch":
> 
> Temp file with moniker 'svn_delta' already in use at /usr/lib/perl5/vendor_perl/5.10/Git.pm line 1024.
> 
> This occurs only when using an http:// URL; svn:// URLs work fine.

I traced git-svn and discovered that the error is due to a known problem in the SVN APIs. ra_serf does not drive the delta editor in a depth-first manner as required by the API [1]. Instead, the calls come in this order:

 1. open_root
 2. open_directory
 3. add_file
 4. apply_textdelta
 5. add_file
 6. apply_textdelta

This is a known issue [2] and one that the Subversion folks have elected not to fix [3].

[1] http://subversion.apache.org/docs/api/latest/structsvn__delta__editor__t.html#details [2] http://subversion.tigris.org/issues/show_bug.cgi?id=2932 [3] http://subversion.tigris.org/issues/show_bug.cgi?id=3831

-- 
David Rothenberger  ----  daveroth@acm.org

management, n.:
        The art of getting other people to do all the work.
Kyle McKay· Jul 6, 2013, 03:41 UTC · re: David Rothenberger · lore

Re: git-svn "Temp file with moniker 'svn_delta' already in use" and skelta mode

On Jul 5, 2013, at 16:14, David Rothenberger wrote:
Show 8 quoted lines
> On 7/5/2013 1:48 PM, David Rothenberger wrote:
>> I recently upgraded my Subversion server to 1.8.0 and started
>> receiving the following error from "git svn fetch":
>>
>> Temp file with moniker 'svn_delta' already in use at /usr/lib/perl5/ 
>> vendor_perl/5.10/Git.pm line 1024.
>>
>> This occurs only when using an http:// URL; svn:// URLs work fine.

I have created a patch (separate emails) that seems to work. However, if the server being fetched against is not configured well for use with serf then "Error retrieving REPORT (54): Connection reset by peer Git/SVN/Ra.pm line 282" errors can occur and/or the fetch can be horribly slow compared to using neon. If the "Connection reset" error occurs, the fetch can be restarted to get more revisions until it dies again.

Kyle

← back to recent threads