有人能帮我调试这个问题吗?一切正常(例如我可以提交、签出等),但这个提交总是失败,如下所述。我尝试在新的存储库中签出并提交,但问题相同。还请注意,这是一个非常大的存储库(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]
可以有效地解决问题。