Может кто-нибудь помочь мне отладить эту проблему? Все работает (то есть я могу зафиксировать, оформить заказ и т.д.), Но этот коммит всегда завершается неудачей, как описано ниже. Я попытался проверить в новом хранилище и зафиксировать, но тот же вопрос. Также обратите внимание, что это очень большой репозиторий (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-пользователей.

1 ответ1

0

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .