大型SVN结账偶尔会失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大型SVN结账偶尔会失败相关的知识,希望对你有一定的参考价值。

我目前在一个大型,完整的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协议来执行结帐。


我试过的事情:

将Apache上的“TimeOut”指令设置为更高的值(最多30000秒)。

将“SVNAdvertiseV2Protocol”指令设置为off。

将“SVNPathAuthz”指令设置为off。

将“SVNCompressionLevel”指令设置为“0”。

答案

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

Apache dav_svn_module指令

SVNAllowBulkUpdates Prefer

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

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

另一答案

我有以下错误:

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

另一答案

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

RemoveEncoding .gz
RemoveEncoding .Z

这实际上是在changelog中提到过的,但我也不在乎读这篇文章并且很难学到它......

另一答案

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

我的解决方案是添加类似于teori的答案的SVNAllowBulkUpdates Off。我试图使用“SVNAllowBulkUpdates首选”,但是当我重新启动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.所暗示的那样禁用它,它也没有效果。我仍然认为可能与之相关的原因是,在消除错误后,我注意到传输的字节数比以前大得多。

以上是关于大型SVN结账偶尔会失败的主要内容,如果未能解决你的问题,请参考以下文章

SVN 结帐失败,“块分隔符无效”

项目SVN版本管理与大型代码上线方案

贝宝快递结账服务器端,认证失败

单个大型 SVN 项目的最佳实践

大型分布式团队的代码版本管理[转]

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]