我目前在大型完整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"。
答案 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>
其他想法:我不相信Timeout
和AuthDigestNonceLifetime
设置与问题直接相关。我确实试图使用它们,但都没有任何效果。我专门在SVN主机和反向代理主机上尝试了timeout
,keepalive
和keepalivetimeout
设置。
这个问题可能与“缩小”有关,但是我也按照Tim S.的建议将其禁用,但也没有效果。我仍然认为可能与之相关的原因是,在消除错误后,我注意到传输的字节数比以前大得多。