{"issue":{"state":"open","created_at":"2011-11-29T19:52:01Z","updated_at":"2011-11-29T19:52:05Z","user":{"gravatar_id":"b4420dc33f804875eefac3035380c61e","id":1219952,"url":"https://api.github.com/users/NinaG","avatar_url":"https://secure.gravatar.com/avatar/b4420dc33f804875eefac3035380c61e?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"NinaG"},"comments":3,"body":"Es gibt bei einigen Nutzern das Problem, dass die localconfig.php von einem auf den anderen Tag fast leer ist. In den Diskussionen dazu im Forum kristallierte sich eine mögliche globale Ursache heraus, die in der Technik von Contao verankert ist. \n\n**Peter (acenes) erklärte [hier im Thread](http://www.contao-community.de/showthread.php?937-TL-l%F6scht-eigene-config&p=70664#post70664) die potentielle Problemstellung:**\n\n2 quasi gleichzeitige Seitenaufrufe von verschiedenen Clients.\n\nDer erste liest die Config Datei ein und führt den cron Job aus. Dann will sie im Destructor der Config Klasse den neuen Ihalt mit dem geänderten cron Timestamp in die Datei speichern. Während der Schreiboperation kommt nun der zweite Seitenaufruf und liest die noch unvollständig gespeicherte neue Config Datei ein. Da haben wir dann das genau das Problem.\n\n**Er postet auch gleich die [potentielle Lösungsstellung](http://www.contao-community.de/showthread.php?937-TL-l%F6scht-eigene-config&p=70664#post70664:**)\n\nDie Schreiboperation im Destructor der Config Klasse per Semaphore schützen.\nAuf Dateibasis aber nicht universell lösbar weil Semaphore-Dateien (wie in Unix/Linux üblich) bei Windows nicht funktionieren. Ich selber habe bei meiner cron Erweiterung deshalb einen Lock in MySQL verwendet. Im Destruktor der Config Klasse könnte das etwa so aussehen:\n\nPHP-Code:\n\n```\ndo {\n    $ql = $this->Database->prepare(\"select get_lock('configlock',0) as lockstate\")->executeUncached();\n} while (\n\n![]($ql->next() || )intval($ql->lockstate));\n$objFile = new File('system/config/localconfig.php');\n$objFile->write($strFile);\n$objFile->close();\n$this->Database->prepare(\"select release_lock('configlock')\")->executeUncached(); \n```\n\nZusätzlich wäre es natürlich sinnvoll auch den cron Job selber gegen doppelte Ausführung per Semaphore zu schützen. \n\n**Dazu [merkte lindesbs folgendes an](http://www.contao-community.de/showthread.php?937-TL-l%F6scht-eigene-config&p=70668#post70668:**)\n\nBei dieser Art des Lockings aber beachten, das dies alle DatenbankTypen ausser MySQL aussperrt. Das muss in den DB_Drivern geschehen, so wie das Locking der Tabellen, was Leo genutzt hatte. Siehe http://dev.contao.org/issues/2068\n\n**acenes [ergänzte](http://www.contao-community.de/showthread.php?937-TL-l%F6scht-eigene-config&p=70676#post70676:**)\nRichtig, ausserdem müsste man das Lesen mit dem gleichen Lock schützen, sonst hat man nur die halbe Lösung.\n\nBesser wäre es wohl, die cron Timestamps in der DB zu speichern statt in der Config Datei. \n\n**lindesbs [ergänzte](http://www.contao-community.de/showthread.php?937-TL-l%F6scht-eigene-config&p=70680#post70680:**)\nGenau, und mit den Timestamps auch ein Locking. Zusaetzlich eine Kontrolle das die PHP Timeout nicht groesser als der Zeitabstand des Cron ist. \n\nIch hoffe, dass ich das so sinnvoll zusammengefasst habe. So wie ich das als Nicht-PHPler verstehe, ist das ein generelles Problem das theoretisch bei jedem auftauchen könnte und deshalb im Core behoben werden sollte.\n\n--- _Originally created on October 14th, 2010, at 02:46pm (ID 2616)_","assignee":{"gravatar_id":"87d2e5aefadcb310f9155df28c2b3582","id":1192057,"url":"https://api.github.com/users/leofeyer","avatar_url":"https://secure.gravatar.com/avatar/87d2e5aefadcb310f9155df28c2b3582?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"leofeyer"},"id":2391464,"pull_request":{"patch_url":null,"html_url":null,"diff_url":null},"labels":[{"name":"backend","color":"e6e6e6","url":"https://api.github.com/repos/contao/import/labels/backend"},{"name":"Defect","color":"bd2c00","url":"https://api.github.com/repos/contao/import/labels/Defect"}],"number":2616,"title":"Generelles Risiko der \"localconfig-Leerung\"","closed_at":null,"html_url":"https://github.com/contao/import/issues/2616","url":"https://api.github.com/repos/contao/import/issues/2616","milestone":{"state":"open","created_at":"2011-11-29T15:29:54Z","closed_issues":44,"due_on":null,"creator":{"gravatar_id":"87d2e5aefadcb310f9155df28c2b3582","id":1192057,"url":"https://api.github.com/users/leofeyer","avatar_url":"https://secure.gravatar.com/avatar/87d2e5aefadcb310f9155df28c2b3582?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"leofeyer"},"number":32,"description":"Contao 2.10.0 (minor release)","title":"2.10.0","open_issues":1,"url":"https://api.github.com/repos/contao/import/milestones/32"}},"action":"created","comment":{"created_at":"2011-11-29T19:52:04Z","updated_at":"2011-11-29T19:52:04Z","user":{"gravatar_id":"929fedda626b6d2219b602c210b5f82c","id":1218766,"url":"https://api.github.com/users/xchs","avatar_url":"https://secure.gravatar.com/avatar/929fedda626b6d2219b602c210b5f82c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"xchs"},"body":"Laut den Meldungen im Forum trat das gegenständliche Problem zumeist in Verbindung mit dem Safe Mode Hack (SMH) auf. Ob das nun kausal damit zusammenhängt, weiß ich leider nicht.\n\nIch vermute mal, dass auf contao.org kein SMH notwendig ist. :)\n\n--- _Originally created on October 24th, 2010, at 12:04am_","id":2944554,"url":"https://api.github.com/repos/contao/import/issues/comments/2944554"}}