svn:提交事务时发生错误

svn:提交事务时发生错误

有人能帮我调试这个问题吗?一切正常(例如我可以提交、签出等),但这个提交总是失败,如下所述。我尝试在新的存储库中签出并提交,但问题相同。还请注意,这是一个非常大的存储库(500GB),并且提交也非常大(36k 个文件,总计 10GB)。

这是apache2错误日志:

[Sat Feb 10 03:25:16.262765 2018] [dav:error] [pid 3339] [client X.X.X.X:61908] Could not DELETE /svn/repo/!svn/txn/463-e8.  [500, #0]
[Sat Feb 10 03:25:16.265881 2018] [dav:error] [pid 3339] [client X.X.X.X:61908] could not abort transaction.  [500, #2]
[Sat Feb 10 03:25:16.265905 2018] [dav:error] [pid 3339] [client X.X.X.X:61908] Transaction '463-e8' cleanup failed  [500, #2]
[Sat Feb 10 03:25:16.265923 2018] [dav:error] [pid 3339] [client X.X.X.X:61908] Can't remove '/mnt/vc/svn/repo/db/transactions/463-e8.txn/node._ji.0'  [500, #2]
[Sat Feb 10 03:25:16.265940 2018] [dav:error] [pid 3339] [client X.X.X.X:61908] Can't remove file '/mnt/vc/svn/repo/db/transactions/463-e8.txn/node._ji.0': No such file or directory  [500, #2]
[Sat Feb 10 03:25:30.640591 2018] [dav:error] [pid 2966] [client X.X.X.X:61712] Could not MERGE resource "/svn/repo/!svn/txn/463-e8" into "/svn/repo/repofolder".  [500, #0]
[Sat Feb 10 03:25:30.642889 2018] [dav:error] [pid 2966] [client X.X.X.X:61712] An error occurred while committing the transaction.  [500, #160014]
[Sat Feb 10 03:25:30.643003 2018] [dav:error] [pid 2966] [client X.X.X.X:61712] Reference to non-existent node '_1bqk.0.t463-e8' in filesystem '/mnt/vc/svn/repo/db'  [500, #160014]

客户端给出:

done
Committing transaction...
svn: E175012: Commit failed (details follow):
svn: E175012: Connection timed out
svn: E200042: Additional errors:
svn: E175002: Unexpected server error 500 'Internal Server Error' on '/svn/repo/!svn/txn/463-e8'

一开始我以为这是一个权限问题。所以我在服务器上做了以下操作:

su - www-data -s /bin/bash -c "svnadmin rmtxns /mnt/vc/svn/repo/ 463-e8"
Transaction '463-e8' removed.

没有任何错误。Apache 以 身份运行www-data。设置了以下权限:

chown www-data:www-data /mnt/vc -R
chmod 0774 /mnt/vc -R

我已经运行了svnadmin verify,没有发现任何问题。dmesg没有显示任何新内容。

apache svn 配置几乎是默认的。

KeepAlive On
MaxKeepAliveRequests 0
# Set to 10h.
Timeout 36000

SVNCompressionLevel 5
SVNInMemoryCacheSize 16384
SVNCacheTextDeltas On
SVNCacheFullTexts On
SVNAllowBulkUpdates Prefer

<Location /svn>
    DAV svn
    SVNParentPath /mnt/vc/svn
    SVNListParentPath On

    # Allow large request
    LimitXMLRequestBody 0
</Location>

额外信息:

Server: Debian 9.3
apache2/stable,stable,now 2.4.25-3+deb9u3 amd64 [installed]
libapache2-mod-svn/stable,stable,now 1.9.5-1+deb9u1 amd64 [installed]
Server svn client: 1.9.5-1+deb9u1 
Client: svn 1.9.7

编辑:我将工作副本复制到存储库服务器。然后我尝试提交,但出现了同样的错误。然后我将工作副本重新定位到直接存储库位置:svn relocate file:///mnt/vc/svn/repo。这次提交成功了。所以它与有关dav_svn

同样的问题是subversion-用户邮件列表

答案1

这似乎是客户端的问题,导致奇怪的服务器端错误。

客户端将所有文件传输到服务器后,服务器开始将它们提交到存储库。在此期间,客户端不会收到任何响应,如果超过默认超时时间,则客户端会关闭连接,从而导致服务器端出现上述错误。

1.8 版的一个变化是使用 serf 而不是 neon 来处理客户端的 HTTP。使用 neon 时,默认客户端 HTTP 超时为 60 分钟,而使用 serf 时则为 10 分钟。客户端可以通过设置 servers:global:http-timeout 来更改其默认超时。1

这里是该文件的文档servers

http-timeout = 3600标签下的设置[global]可以有效地解决问题。

相关内容