{"id":985,"date":"2011-01-25T22:06:29","date_gmt":"2011-01-25T21:06:29","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=985"},"modified":"2011-01-25T22:06:29","modified_gmt":"2011-01-25T21:06:29","slug":"svn-und-seine-eimer-brigaden","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=985","title":{"rendered":"SVN und seine Eimer-Brigaden"},"content":{"rendered":"<p>Die wohl mysteri\u00f6seste Fehlermeldung, die mir beim Apache bisher untergekommen ist (abgesehen von nichtssagenden SegFault-Meldungen, wenn pl\u00f6tzlicher Kindstot auftritt, liefert das SVN-Modul, in Verbindung mit WebDAV. Glaubt ihr nicht?<!--more--><\/p>\n<p>Dann werfen wir doch einmal einen gespannten Blick auf folgenden Auszug des Error-Logs:<br \/>\n<code>[Tue Jan 25 21:01:29 2011] [error] [client 1.3.3.7] (11)Resource temporarily unavailable: Could not get next bucket brigade (URI: \/tnk\/!svn\/wrk\/3cd88c65-3133-4b94-9a4e-4bfb50692b81\/trunk\/some\/file\/propably\/involved.here)  [500, #0]<br \/>\n[Tue Jan 25 21:01:33 2011] [error] [client 1.3.3.7] Unable to PUT new contents for \/tnk\/!svn\/wrk\/3cd88c65-3133-4b94-9a4e-4bfb50692b81\/trunk\/some\/file\/propably\/involved.here.  [403, #0]<br \/>\n[Tue Jan 25 21:01:33 2011] [error] [client 1.3.3.7] Could not prepare to write the file  [500, #160044]<br \/>\n[Tue Jan 25 21:01:33 2011] [error] [client 1.3.3.7] Cannot write to the prototype revision file of transaction '42-1j' because a previous representation is currently being written by this process  [500, #160044]<\/code><\/p>\n<p>Ich habe von der Person, die diesen Fehler &#8211; fast schon regelm\u00e4\u00dfig, hab ich mir sagen lassen &#8211; bekam, auch schon mehrfach Hinweise auf das Vorhandensein dieses Fehlers bekommen. Einzig das Finden einer L\u00f6sung war bisher immer recht schwierig, weil auf meinen Repositories, die auf dem gleichen Server liegen, nichts von all dem reproduzierbar war.<\/p>\n<p>Gut. Heute trat das Problem wieder einmal auf, diesmal hatte ich aber bei Google ausreichend Gl\u00fcck und <a href=\"http:\/\/www.dev.voxforge.org\/projects\/Main\/ticket\/390\">fand da was<\/a>. Sieht auf den ersten Blick erst einmal unscheinbar aus, aber GENAU hier passten zwei Dinge zusammen: Der Beschuldigte wollte gro\u00dfe Dateien hochladen und die Fehlermeldung. \ud83d\ude09<\/p>\n<p>Anhand des Links war das erste Problem auch bereits recht schnell identifiziert. Wie im Link beschrieben wurde zuerst <\/p>\n<pre lang=\"apache\">LimitXMLRequestBody 0<\/pre>\n<p> und danach <\/p>\n<pre lang=\"apache\">LimitRequestBody 0<\/pre>\n<p> ausprobiert. Damit ging schon mal ein erster Teil des Commits durch: Der kleinere von beiden.<\/p>\n<p>F\u00fcr den gr\u00f6\u00dferen war nun etwas Raten angesagt, da viele Module aber keine Limits setzen, war (abgesehen von mod_fcgid, was f\u00fcr FCGI-Anfragen ein Limit erzwingt) erstmal nur mod_reqtimeout auf der Liste der Verd\u00e4chtigen. Also kurz mit <\/p>\n<pre lang=\"bash\">a2dismod reqtimeout\r\napache2ctl restart<\/pre>\n<p> und auf den n\u00e4chsten Anlauf gewartet. Nach mehr als 5 Minuten war auch dieser abgeschlossen: Diesmal komplett OHNE Fehlermeldung.<\/p>\n<p>Da mod_reqtimeout nun auf seine Art abgebrochene oder andere tote Verbindungen beseitgt, kann ich auf einem Live-System nur schlecht darauf verzichten. Ein Anheben der Grenzwerte sollte aber dennoch \u00e4hnliche Erfolge zeigen:<\/p>\n<pre lang=\"apache\" escaped=\"true\">&lt;IfModule reqtimeout_module&gt;\r\n\r\n# mod_reqtimeout limits the time waiting on the client to prevent an\r\n# attacker from causing a denial of service by opening many connections\r\n# but not sending requests. This file tries to give a sensible default\r\n# configuration, but it may be necessary to tune the timeout values to\r\n# the actual situation. Note that it is also possible to configure\r\n# mod_reqtimeout per virtual host.\r\n\r\n# Wait max 20 seconds for the first byte of the request line+headers\r\n# From then, require a minimum data rate of 500 bytes\/s, but don't\r\n# wait longer than 40 seconds in total.\r\n# Note: Lower timeouts may make sense on non-ssl virtual hosts but can\r\n# cause problem with ssl enabled virtual hosts: This timeout includes\r\n# the time a browser may need to fetch the CRL for the certificate. If\r\n# the CRL server is not reachable, it may take more than 10 seconds\r\n# until the browser gives up.\r\nRequestReadTimeout header=20-600,minrate=500\r\n\r\n# Wait max 10 seconds for the first byte of the request body (if any)\r\n# From then, require a minimum data rate of 500 bytes\/s\r\nRequestReadTimeout body=10,minrate=500\r\n\r\n&lt;\/IfModule&gt;<\/pre>\n<p>Letzten Neustart eingelegt und jetzt hei\u00dft es abwarten, ob die Konfig h\u00e4lt.<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=985&amp;md5=36c0f6296b744dbc2cd51b7b9930d3be\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Die wohl mysteri\u00f6seste Fehlermeldung, die mir beim Apache bisher untergekommen ist (abgesehen von nichtssagenden SegFault-Meldungen, wenn pl\u00f6tzlicher Kindstot auftritt, liefert das SVN-Modul, in Verbindung mit WebDAV. Glaubt ihr nicht?<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[156,10,98,69,346,19],"class_list":["post-985","post","type-post","status-publish","format-standard","hentry","category-server","tag-apache","tag-debian","tag-developement","tag-internet","tag-server","tag-svn"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=985"}],"version-history":[{"count":2,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/985\/revisions"}],"predecessor-version":[{"id":987,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/985\/revisions\/987"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=985"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=985"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}