大型SVN结账偶尔会失败

时间:2014-08-20 20:13:49

标签: windows apache svn xampp tortoisesvn

我目前在大型完整SVN存储库结帐(20GB +)期间遇到问题,结帐流程将随机停止。存储库由许多小文本文件和一些大型CSV文件组成。

很难缩小问题的范围,因为错误只会在结帐时弹出几个小时。从我所看到的情况来看,它不是一个停止进程的特定文件,并且使用svnadmin进行验证没有返回任何错误。

错误:

典型的Apache错误日志:

Unable to deliver content.  [500, #0]
Unable to deliver content.  [500, #0]
Could not write data to filter.  [500, #175002]
Could not write data to filter.  [500, #175002]
Provider encountered an error while streaming a REPORT response.  [500, #0]
A failure occurred while driving the update report editor  [500, #730053]

功能

服务器:运行XAMPP v1.8.2-5,Apache v2.4和SVN v1.8.9的Windows Server 2003。它最近从Apache v2.2和SVN v1.5.3更新,它遇到了类似的问题。

客户端:运行TortoiseSVN v1.8.8 x64的Windows 7,最近从v1.8.3 x64更新,遇到类似问题。命令行SVN v1.8.9。

我使用HTTP协议执行结帐。


我尝试过的事情:

设置" TimeOut" Apache上的指令更高的值(最多30000秒)。

设置" SVNAdvertiseV2Protocol"关闭指令。

设置" SVNPathAuthz"关闭指令。

设置" SVNCompressionLevel"指令" 0"。

5 个答案:

答案 0 :(得分:11)

我们最近遇到了同样的问题。到目前为止,我认为它与较新的颠覆客户端有关。

Apache dav_svn_module指令

SVNAllowBulkUpdates Prefer

似乎有所帮助。将其添加到apache conf后,没有发现任何问题。在此之前,大多数大型结账都失败了。

我找到了一个讨论线程,它解释了与版本1.8.x更新的subversion客户端相关的问题。 See the mailing list thread.

答案 1 :(得分:3)

我遇到以下错误:

Unable to deliver content.  [500, #0]
Could not write data to filter.  [500, #175002]

我甚至没有使用mod_deflate,所以不可能。在我的情况下,结果是导致错误的身份验证(auth_digest_module)。如果checkout持续时间超过300秒,我将在Apache服务器日志中记录上述错误。

问题是默认的AuthDigestNonceLifetime 300指令。见here。我的解决方案是将此指令设置为无穷大:AuthDigestNonceLifetime -1

答案 2 :(得分:1)

我发现的“无法写入数据以进行筛选”错误的另一个可能原因是NAT回送或发夹回送。我们的SVN储存库服务器位于ESXi主机内部的来宾VM上。同一ESXi主机中的SVN客户端正尝试使用URL引用存储库,该URL可以解析到Internet,然后“发夹环回”回到LAN和ESXi主机。

在尝试执行TortoiseSVN Checkout时,同一ESXi主机上的SVN客户端来宾VM会在/ etc / httpd / logs / ssl_error_log中始终出现以下错误:

[dav:error] [pid 2204] Unable to deliver content.  [500, #0]
[dav:error] [pid 2204] Could not write EOS to filter.  [500, #104]
[dav:error] [pid 2204] Could not write data to filter  [500, #104]
[dav:error] [pid 1687] Unable to deliver content.  [500, #0]
[dav:error] [pid 1687] Could not write data to filter.  [500, #104]
[dav:error] [pid 1687] Could not write data to filter  [500, #104]
[dav:error] [pid 1686] Provider encountered an error while streaming a REPORT response.  [500, #0]
[dav:error] [pid 1686] A failure occurred while driving the update report editor  [500, #32]
[dav:error] [pid 1686] Broken pipe  [500, #32]

TortoiseSVN日志只会说:

ra_serf: An error occurred during SSL communication

通过使用本地IP地址而不是解析为可上网的URL更改对SVN存储库URL的引用来解决。同一LAN中但不在ESXi中的其他SVN客户端,例如我们的笔记本电脑,回送没有问题,只有ESXi中的SVN客户端出现此错误。

答案 3 :(得分:0)

这似乎是subversion maillinglist上根据this post的文件的编码问题。您可以在apache配置中查找AddEncoding x-gzip .gz条目并将其删除或将其添加到<Location /svn>…</Location>条目中:

RemoveEncoding .gz
RemoveEncoding .Z

这是changelog中实际提到的,但我也不在乎读这篇文章并且难以理解......

答案 4 :(得分:0)

我遇到了同样的问题,尝试使用由Cento 7.4.1708,Apache 2.4.6,Subversion 1.9.15和使用TortoiseSVN 1.9的Windows 10客户端组成的服务器在中等大小(500MB)的存储库上进行snv checkout。 7来自Apache反向代理。

我的解决方案是添加SVNAllowBulkUpdates Off类似于teori的答案。我试图使用“ SVNAllowBulkUpdates Prefer ”,但是当我重新启动httpd时,它抛出一个错误,说“ SVNAllowBulkUpdates必须打开或关闭”。我的最终SVN / Apache配置文件是:

<Location /svn >
    DAV svn
    SVNParentPath /svn
    SVNAllowBulkUpdates Off
    AuthType Basic
    AuthName "SVN Repo"
    AuthUserFile /var/svn/svn-auth-user
    Require valid-user
</Location>

其他想法:我不相信TimeoutAuthDigestNonceLifetime设置与问题直接相关。我确实试图使用它们,但都没有任何效果。我专门在SVN主机和反向代理主机上尝试了timeoutkeepalivekeepalivetimeout设置。

这个问题可能与“缩小”有关,但是我也按照Tim S.的建议将其禁用,但也没有效果。我仍然认为可能与之相关的原因是,在消除错误后,我注意到传输的字节数比以前大得多。