Die Stop-Rückmeldemethode einer Ressourcentypimplementierung wird von RGM auf einem Cluster-Knoten aufgerufen, um die Anwendung zu stoppen. Die Rückrufsemantik für die Stop-Methode setzt folgende Faktoren voraus:
Die Stop-Methode muss idempotent lauten, da die Stop-Methode von der RGM aufgerufen werden kann, selbst wenn die Start-Methode an dem Knoten nicht erfolgreich ausgeführt werden konnte. Deshalb muss die Stop-Methode auch erfolgreich sein (exit zero), wenn die Anwendung derzeit nicht an dem Cluster-Knoten ausgeführt wird und es für sie keine Arbeit gibt.
Wenn die Stop-Methode des Ressourcentyps an einem Cluster-Knoten fehlschlägt (exits nonzero), wird die angehaltene Ressource in den STOP_FAILED-Zustand versetzt. Je nach der Einstellung Failover_mode der Ressource führt diese Bedingung eventuell dazu, dass der RGM einen harten Neustart des Cluster-Knotens durchführt.
Deshalb müssen Sie die Stop-Methode so entwerfen, dass die Anwendung durch sie definitiv angehalten wird. Unter Umständen müssen Sie sogar SIGKILL verwenden, um die Anwendung abrupt zu beenden, falls die Anwendung anderweitig nicht beendet werden kann.
Sie müssen ebenfalls sicherstellen, dass diese Methode die Anwendung rechtzeitig anhält, weil der Framework den Ablauf der Stop_timeout-Eigenschaft als stop-Fehler behandelt und die Ressource folglich in einen STOP_FAILED-Zustand versetzt.
Das DSDL-Dienstprogramm scds_pmf_stop() sollte für die meisten Anwendungen ausreichen, da es zuerst versucht, die Anwendung mit SIGTERM sanft zu stoppen. Diese Funktion liefert dann SIGKILL an den Prozess. Bei dieser Funktion wird davon ausgegangen, dass die Anwendung unter PMF mit scds_pmf_start() gestartet wurde. Weitere Informationen über dieses Dienstprogramm finden Sie unter PMF-Funktionen.
Wenn die anwendungsspezifische Funktion, die die Anwendung stoppt, tsvc_stop() heißt, implementieren Sie die Stop-Methode wie folgt:
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Initialisierungsfehler */ } return (svc_stop(handle));
Ob die Implementierung der vorangegangenen svc_stop()-Funktion die scds_pmf_stop()-Funktion enthält, ist irrelevant. Ihre Entscheidung, die scds_pmf_stop()-Funktion einzuschließen, richtet sich danach, ob die Anwendung unter PMF über die Start-Methode gestartet wurde.
Die svc_validate()-Methode wird in der Implementierung der Stop-Methode nicht verwendet, da die Stop-Methode selbst bei einem Systemfehler die Anwendung an diesem Knoten anhalten sollte.