簡體   English   中英

大型 SVN 結帳偶爾會失敗

[英]Large SVN checkout fails sporadically

我目前在大型、完整的 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 上的“超時”指令設置為更高的值(最多 30000 秒)。

將“SVNAdvertiseV2Protocol”指令設置為關閉。

將“SVNPathAuthz”指令設置為關閉。

將“SVNCompressionLevel”指令設置為“0”。

我們最近遇到了同樣的問題。 到目前為止,我認為它與較新的 subversion 客戶端有關。

Apache dav_svn_module 指令

SVNAllowBulkUpdates Prefer

似乎有幫助。 將其添加到 apache conf 后,未發現任何問題。 在此之前,大多數大型結帳都失敗了。

我找到了一個討論線程,它解釋了與比版本 1.8.x 更新的 subversion 客戶端相關的問題。 請參閱郵件列表線程。

我有以下錯誤:

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

我什至沒有使用mod_deflate所以那不可能。 在我的情況下,結果是導致錯誤的身份驗證( auth_digest_module )。 如果checkout持續時間超過 300 秒,我會將上述錯誤記錄在我的 Apache 服務器日志中。

問題是默認的AuthDigestNonceLifetime 300指令。 這里 我的解決方案是將此指令設置為無窮大: AuthDigestNonceLifetime -1

根據 subversion maillinglist 上的這篇文章,這似乎是文件的編碼問題。 您可以在 apache 配置中查找AddEncoding x-gzip .gz條目並將其刪除或將其添加到您的<Location /svn>…</Location>條目中:

RemoveEncoding .gz
RemoveEncoding .Z

這實際上在變更日志中提到過,但我也沒有在意閱讀它並以艱難的方式學習它......

我遇到了同樣的問題,試圖使用由 Centos 7.4.1708、Apache 2.4.6、Subversion 1.9.15 和 Windows 10 客戶端組成的服務器在中等大小(500MB)的存儲庫上進行 snv 結賬,從后面使用 TortoiseSVN 1.9.7 Apache 反向代理。

我的解決方案是添加SVNAllowBulkUpdates Off類似於SVNAllowBulkUpdates Off的答案。 我嘗試使用“ 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. 的建議禁用了它,但也沒有效果。 我仍然認為可能相關的原因是,在消除錯誤后,我注意到傳輸的字節數比以前大得多。

我發現的“無法將數據寫入過濾器”錯誤的另一個可能原因是 NAT 環回或發夾環回。 我們在 ESXi 主機內的來賓 VM 上有我們的 SVN 存儲庫服務器。 同一 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 地址而不是解析到 Internet 的 URL 更改對 SVN 存儲庫 URL 的引用來修復。 同一個局域網內但不在ESXi中的其他SVN客戶端,例如我們的筆記本電腦的Loopback沒有問題,只有ESXi中的SVN客戶端有這個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM