Die Stop-Rückmeldemethode einer Ressourcentypimplementierung wird von RGM auf einem Cluster-Knoten aufgerufen, um die Anwendung zu stoppen. Für die Rückmeldesemantik der Stop-Methode gelten folgende Voraussetzungen:
Die Stop-Methode muss idempotent sein, da die Stop-Methode von RGM auch dann aufgerufen werden kann, wenn die Start-Methode auf dem Knoten nicht erfolgreich beendet wurde. Daher muss die Stop-Methode erfolgreich sein (mit 0 beenden), auch wenn die Anwendung derzeit nicht auf dem Cluster-Knoten läuft und keine Aktion ausgeführt werden muss.
Wenn die Stop-Methode des Ressourcentyps auf einem Cluster-Knoten fehlschlägt (nicht mit 0 endet), wird die zu stoppende Ressource in den STOP_FAILED-Zustand versetzt. Je nach der Failover_mode-Einstellung der Ressource kann dies zu einem harten Neustart des Cluster-Knotens durch RGM führen. Daher ist es wichtig, die Stop-Methode so zu entwerfen, dass sie versucht, die Anwendung wenn irgend möglich zu stoppen, bei Bedarf auch durch ein hartes Erzwingen der Anwendungsbeendigung (zum Beispiel mit SIGKILL), wenn andere Versuche fehlgeschlagen sind. Die Methode muss das Stoppen auch innerhalb eines bestimmten Zeitraums erzielen, da das Framework ein Überschreiten von Stop_timeout als Stopp-Fehlschlag wertet und die Ressource in den STOP_FAILED-Zustand versetzt.
Das DSDL-Dienstprogramm scds_pmf_stop() düfte für die meisten Anwendungen ausreichend sein. Es versucht zunächst, die Anwendung weich zu stoppen (mithilfe von SIGTERM), wobei sie davon ausgeht, dass die Anwendung unter PMF über scds_pmf_start() gestartet wurde. Darauf folgt SIGKILL, um das Beenden des Prozesses zu erzwingen. Einzelheiten zu diesem Dienstprogramm finden Sie unter PMF-Funktionen.
Dem bislang hier verwendeten Codemodell entsprechend, und ausgehend von der Annahme, dass die anwendungsspezifische Funktion zum Stoppen der Anwendung svc_stop() ist (ob die Implementierung von svc_stop() die scds_pmf_stop()-Methode verwendet, spielt hier keine Rolle, und hängt davon ab, ob die Methode unter PMF über die Start-Methode gestartet wurde), kann die Stop-Methode folgendermaßen implementiert werden:
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Initialisierungsfehler */ } return (svc_stop(handle));
Die svc_validate()-Methode wird in der Implementierung der Stop-Methode nicht verwendet, denn die Stop-Methode muss selbst bei einem aktuellen Systemproblem versuchen, die Anwendung auf diesem Knoten zu stoppen.