svn: ошибка произошла при совершении транзакции

687
Davor Josipovic

Может кто-нибудь помочь мне отладить эту проблему? Все работает (т. Е. Я могу зафиксировать, оформить заказ и т. Д.), Но этот коммит всегда терпит неудачу, как описано ниже. Я попытался проверить в новом хранилище и зафиксировать, но тот же вопрос. Также обратите внимание, что это очень большой репозиторий (500 ГБ) и очень большой коммит (36k файлов общим объемом 10 ГБ).

Это 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-пользователей .

0

1 ответ на вопрос

0
Davor Josipovic

Кажется, это проблема на стороне клиента, которая приводит к странным ошибкам на стороне сервера.

После того, как клиент передает все файлы на сервер, сервер начинает фиксировать их в хранилище. В течение этого времени клиент не получает ответа, и если это занимает больше времени, чем тайм-аут по умолчанию, то клиент закрывает соединение, что приводит к указанной выше ошибке на стороне сервера.

Одним из изменений в 1.8 является то, что serf используется для обработки HTTP на стороне клиента, а не на неоне. Время ожидания HTTP по умолчанию на стороне клиента при использовании neon составляет 60 минут, но при использовании serf оно составляет 10 минут. Клиент может изменить время ожидания по умолчанию, установив серверы: global: http-timeout. 1

А вот и документация для serversфайла.

Установка http-timeout = 3600под [global]тегом эффективно устраняет проблему.

Похожие вопросы