svn: Beim Festschreiben der Transaktion ist ein Fehler aufgetreten

833
Davor Josipovic

Kann mir jemand beim Debuggen dieses Problems helfen? Alles funktioniert (dh ich kann ein Commit ausführen, auschecken usw.), aber dieses Commit schlägt immer wie nachstehend beschrieben fehl. Ich habe versucht, in einem neuen Repository auszuchecken und mich zu verpflichten, aber das gleiche Problem. Beachten Sie auch, dass dies ein sehr großes Repository (500 GB) und ein sehr umfangreiches Commit (36 KB-Dateien mit insgesamt 10 GB) ist.

Dies ist das apache2Fehlerprotokoll:

[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] 

Die Kundenseite gibt an:

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' 

Zuerst dachte ich, das wäre eine Erlaubnisfrage. Also habe ich das auf dem Server gemacht:

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

Kein Fehler. Apache läuft als www-data. Folgende Berechtigungen sind gesetzt:

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

Ich bin gelaufen svnadmin verifyund habe keine Probleme gefunden. dmesgzeigt nichts Neues

Die Apache-svn-Konfig ist ziemlich voreingestellt.

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> 

Zusatzinformation:

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 

BEARBEITEN: Ich habe die Arbeitskopie auf den Repository-Server kopiert. Dann habe ich versucht zu begehen, hatte aber den gleichen Fehler. Ich zog dann die Arbeitskopie Repository - Position zu richten: svn relocate file:///mnt/vc/svn/repo. Commit hat dieses Mal gearbeitet. Also hat es etwas mit zu tun dav_svn?

Dieselbe Frage wurde in der Subversion-Benutzer-Mailingliste gestellt .

0

1 Antwort auf die Frage

0
Davor Josipovic

Dies scheint ein clientseitiges Problem zu sein, das zu seltsamen serverseitigen Fehlern führt.

Nachdem der Client alle Dateien auf den Server übertragen hat, beginnt der Server, sie in das Repository einzufügen. Während dieser Zeit erhält der Client keine Antwort. Wenn das Zeitlimit länger als das Standardzeitlimit ist, wird die Verbindung vom Client getrennt. Dies führt zu dem oben genannten Fehler auf der Serverseite.

Eine Änderung von 1.8 besteht darin, dass serf nicht auf Neon, sondern auf Client-Seite mit HTTP behandelt wird. Das standardmäßige HTTP-Timeout auf Clientseite beträgt bei Verwendung von Neon 60 Minuten, bei Serifen jedoch 10 Minuten. Ein Client kann sein Standard-Timeout ändern, indem er Server festlegt: global: http-timeout. 1

Und hier ist die Dokumentation für die serversDatei.

Die Einstellung http-timeout = 3600unter dem [global]Tag behebt das Problem.