My thoughts for dicussion, this should be before Install and Update Simplification
TL;DR: Maintainance Mode als Grundlage für viele automatische Prozesse nötig (DB-Migration, Auto-Update, Install-Prozess). Am besten mit einem "Go-File" realisiert. Crons, Konsole und Remotes nicht vergessen, Benutzer informieren. Allerlei Einzelheiten für die Umsetzung im FoodCoopShop.
Maintainance Mode
Der Maintainance Mode ist ein Feature, das die ungestörte Ausführung bestimmter Programmfunktionen ermöglicht. Hierunter sind praktisch alle Prozesse zu verstehen, die nicht im laufenden Betrieb gefahrlos ausgeführt werden können. Darunter fallen regelmässige Prozesse wie das Datenbank-Backup ebenso wie einmalige Ereignisse wie die Erst-Installation (als absoluter Sonderfall).
Möglichkeiten zum Einschalten
Der Maintainance Mode muss durch Bediener leicht einschaltbar sein, aber auch programmatisch leicht und sicher umsetzbar. Für die Erstinstallation kommt eigentlich nur das Fehlen eines "Go"-Flags in Frage. Bewährt hat sich das Abprüfen der Existenz eines Files (z.B. go
oder run
) in einem für alle Programmaufrufwege zugänglichen Verzeichnis. Durch simples Umbenennen in z.B. maintain
oder locked
lässt sich schnell und sicher umschalten.
Gegen die Verwendung eines DB-Flags spricht neben der Erstinstallationsproblematik die Frage, wie ein DB-Update gesichert werden soll, wenn die DB abgefragt werden können muss.
Alle Programmaufrufwege
Neben dem Web-Interface müssen für nahezu alle Anwendungsfälle auch direkte Konsolenaufrufe, Cronjobs und andere Remote-Requests berücksichtigt werden. Cake hat mit seiner zentralen Architektur für den Regelbetrieb eine gute Ausgangslage. Installation und Auto-Update sind hierbei Sonderfälle, die prinzip-bedingt eigene Programmsysteme haben müssen.
Verriegelung
Es muss zuverlässig verhindert werden, dass 2 Prozesse gleichzeitig in den Maintainance-Mode schalten können. Auch hierfür ist die "atomare" Umbenennung einer Datei gut geeignet. Selbst wenn für beide Prozesse der Existenz-Check gleichzeitig positiv ausfällt, gelingt es auf Betriebssystem-Ebene immer nur einem der beiden Prozesse, die Datei erfolgreich umzubenennen. Der andere erhält eine Fehlermeldung wie "Datei nicht gefunden" und weiss, dass er nicht dran ist.
Warten oder Abbrechen
Prozesse, die mit Benutzer-Interaktion laufen (Web-Interface, Konsolenaufrufe), können fast immer ohne Warten die gewünschte Aktion abbrechen und den Benutzer auf später Vertrösten. Entsprechende Meldungen kennt fast jeder Benutzer. Cronjobs können, wenn das System es erlaubt, später wiederholt versucht werden. Andere Prozesse, bei denen Wiederholen nicht möglich ist, müssen evtl. solange Warten, bis der Maintainance Mode wieder beendet wurde und dann weiterlaufen. Solche Fälle sind aber selten und fast immer selbst ein Fall für den Maintainance-Mode.
Erstinstallation
Ein "kleines" Programmpaket, dass vom Bediener auf den Rechner geladen wird, wird über das Web-Interface gestartet. Dort wird der Bediener um die Eingabe der wichtigsten Installationsdaten gebeten (z.B. die Datenbank-Zugangsdaten). Diese Daten werden verifiziert und schliesslich in die Konfigurationsdatei geschrieben. Nach dem Import der Start-Datenbank und dem Eintragen der eingegebenen Daten erstellt das Installprogramm die go
-Datei und beendet sich selbst. Das Install-Programm kann sich auch selbst löschen, wenn das sinnvoll ist.
DB-Updates, -Backups
Es reicht in der Regel aus, den Maintainance-Mode über die Sicherungsdatei einzuschalten. Eine kurze Sicherheitspause (damit laufende Prozesse fertig werden können) genügt, um den sicheren Ablauf zu gewährleisten.
Auto-Updates
Etwas komplexer ist der Ablauf bei einem Auto-Update. Hier muss zum einen wieder ein Extra-Programm, dass vollständig unabhängig vom Core ist, benutzt werden. Zum Anderen muss man verhindern, das von aussen teilgeänderte Programmpfade aufgerufen werden. Der Austausch der Eintrittsdateien (z.B. index.php, Console/cake) durch spezielle Maintainance-Versionen ist daher der erste Schritt nach dem Warten auf das Ende aller laufenden Prozesse. Dann erfolgt der Austausch der Projekt-Dateien mit Ausnahme der Eintrittsdateien. Sind alle Dateien fertig getauscht, können abschliessend die Eintrittsdateien selbst ausgetauscht werden. Zu guter Letzt erfolgt das Abschalten des Maintainance-Modes.