La méthode de rappel d'Arrêt de la mise en oeuvre d'un type de ressource est appelée par le RGM sur le noeud du cluster pour arrêter l'application. La sémantique de rappel de la méthode Arrêt exige que les conditions suivantes soient remplies :
La méthode Arrêt doit être idempotente parce qu'elle peut être appelée par le RGM même si la méthode Démarrage n'a pas fonctionné avec succès sur le noeud. Par conséquent, la méthode Arrêt doit réussir (valeur 0) même si l'application ne tourne pas sur le noeud du cluster et n'a aucune tâche à accomplir.
Si la méthode Arrêt du type de ressource échoue (valeur différente de 0) sur un noeud du cluster, la ressource arrêtée se retrouve à l'état ÉCHEC_ARRÊT. En fonction du paramètre Mode_basculement de la ressource, il est possible que cela entraîne un redémarrage abrupt du noeud du cluster par le RGM. Il est donc important de concevoir la méthode Arrêt de manière à ce qu'elle essaie vraiment d'arrêter l'application, même en la tuant de manière abrupte (par exemple, à l'aide de SIGKILL) si toutes les autres tentatives se soldent par un échec. Il convient également de s'assurer qu'elle le fasse en temps utile, étant donné que la structure traite l'expiration du Délai_arrêt comme un échec de l'arrêt et fait donc passer la ressource à l'état ÉCHEC_ARRÊT.
L'utilitaire BDSD scds_pmf_stop() doit suffire pour la plupart des applications étant donné qu'il essaie d'abord d'arrêter l'application à chaud (via SIGTERM) (il suppose qu'elle a été démarrée par le gestionnaire de processus à l'aide de scds_pmf_start()) avant d'émettre un SIGKILL à l'adresse du processus. Reportez-vous à la rubrique Fonctions PMF pour obtenir de plus amples informations sur cet utilitaire.
Sur la base du modèle de code utilisé jusqu'à présent, et en supposant que la fonction spécifique visant à arrêter l'application s'appelle svc_stop() (le fait que la mise en oeuvre de svc_stop() utilise ou non scds_pmf_stop() n'a aucune importance ici et dépend de la méthode de démarrage de l'application : par le gestionnaire de processus à l'aide de la méthode Démarrage ou par un autre biais), la méthode Arrêt peut être mise en oeuvre de la façon suivante :
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Erreur d'initialisation */ } return (svc_stop(handle));
La méthode svc_validate() n'est pas utilisée dans la mise en oeuvre de la méthode Arrêt, parce que, même si le système rencontre actuellement un problème, la méthode Arrêt doit tenter d'arrêter l'application sur ce noeud.