【问题标题】:Large SVN checkout fails sporadically大型 SVN 结帐偶尔会失败
【发布时间】:2014-10-14 08:04:55
【问题描述】:

我目前在大型、完整的 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 更新,遇到了类似的问题。

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

我正在使用 HTTP 协议执行结帐。


我尝试过的事情:

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

将“SVNAdvertiseV2Protocol”指令设置为关闭。

将“SVNPathAuthz”指令设置为关闭。

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

【问题讨论】:

  • 我们在这里面临同样的问题,结帐要小得多(300MB),它包含 38000 个文件,有时(完整结帐,大量更新......)会发生上述错误。有人已经对此有所了解了吗?
  • 我在 Linux 上也有这个问题。我对libapache-svn 1.6.7 有这个问题。问题是间歇性的。适用于大多数服务器,但不适用于一台服务器,该服务器似乎具有相同的软件包,并且在其他方​​面与工作的服务器相同。 mod_deflate 在它工作的服务器和它不工作的服务器上都在使用。
  • 我认为 Could not write data to filtermod_deflate 有关。您是否尝试禁用它?
  • 我使用的是旧的 Java“svnkit”客户端(与问题不同),我通过将“svnkit”从 1.3 升级到 1.8 解决了这个问题。我知道这与问题不同,但将其留在这里,以防有人像我一样遇到 svnkit 的问题并找到这个问题。

标签: windows apache svn xampp tortoisesvn


【解决方案1】:

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

RemoveEncoding .gz
RemoveEncoding .Z

这实际上在changelog 中提到过,但我也没有在意阅读并通过艰难的方式学习...

【讨论】:

    【解决方案2】:

    我有以下错误:

    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

    【讨论】:

    • 在这里确认。我们的摘要认证 svn 签出也有类似的问题。
    • TimeoutAuthDigestNonceLifetime 添加到apache conf ... ... Timeout 30000 ... ... AuthDigestNonceLifetime -1 看来我终于接手了。我没有发现哪一个特别有意义,但我很确定如果只将AuthDigestNonceLifetime -1 添加到配置中并没有帮助,apache error.log 中的相同错误消息(就像主题所说)跨度>
    • 我看到了同样的错误。根据 apache 文档,AuthDigestNonceLifetime 仅在Directory.htaccess 中有效。我应该为 SVN 请求使用哪个 Directory ta?
    • @Bram,如果您进一步单击“目录”,那么您会看到它的含义:“在此上下文中标记为有效的指令可以在 , 中使用、 容器在服务器配置文件中,受配置部分中概述的限制。"
    【解决方案3】:

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

    Apache dav_svn_module 指令

    SVNAllowBulkUpdates Prefer
    

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

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

    【讨论】:

    • @terio:在我的服务器上使用 Apache 2.4 SVN 1.9。无法从 SVN 1.9 客户端结帐,但可以从 SVN 1.8 客户端结帐。 SVNAllowBulkUpdates Prefer 显然解决了这个问题。非常感谢!
    • Apache 2.4 SVN 1.9 也在这里...我很高兴它对您有所帮助。自该设置以来,我们在结帐方面没有任何问题;现在3个月过去了。
    • 它没有帮助我……它救了我!再次感谢。
    • 为此苦苦挣扎了很长时间。以为它与 https:// 相关......它不是。这成功了。非常感谢!对于谷歌:我看到的客户端错误:“svn: E120171: Error running context: An error occurred during SSL communication”。
    【解决方案4】:

    我在尝试使用由 Centos 7.4.1708、Apache 2.4.6、Subversion 1.9.15 和 Windows 10 客户端组成的服务器(使用 TortoiseSVN 1.9)对中等大小 (500MB) 的存储库进行 snv 检出时遇到了同样的问题。 7 从 Apache 反向代理后面。

    我的解决方案是添加 SVNAllowBulkUpdates <strong>Off</strong> 类似于 teori 的答案。我尝试使用“SVNAllowBulkUpdates Prefer”,但是当我重新启动 httpd 时,它抛出了一个错误,提示“SVNAllowBulkUpdates must be On or Off”。我最终的 SVN/Apache 配置文件是:

        DAV svn
        SVNParentPath /svn
        SVNAllowBulkUpdates 关闭
        AuthType 基本
        AuthName "SVN 回购"
        AuthUserFile /var/svn/svn-auth-user
        需要有效用户
    位置>

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

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

    【讨论】:

      【解决方案5】:

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

      当尝试执行 TortoiseSVN Checkout 时,同一 ESXi 主机上的 SVN 客户端来宾虚拟机会始终在 /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 的引用来修复。同一个局域网的其他SVN客户端不在ESXi中,比如我们的笔记本Loopback没有问题,只有ESXi中的SVN客户端出现这个错误。

      【讨论】:

        猜你喜欢
        • 2018-08-08
        • 2018-04-09
        • 1970-01-01
        • 2020-08-08
        • 2015-03-26
        • 2013-03-03
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多