La méthode de rappel Stop de la mise en œuvre d'un type de ressource est appelée par le RGM sur le nœud du cluster pour arrêter l'application. La sémantique de rappel de la méthode Stop exige que les conditions suivantes soient remplies :
La méthode Stop doit être idempotente parce qu'elle peut être appelée par le RGM même si la méthode Start n'a pas fonctionné correctement sur le nœud. Par conséquent, la méthode Stop 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 Stop du type de ressource échoue (valeur différente de 0) sur un nœud du cluster, la ressource arrêtée se retrouve à l'état STOP_FAILED. En fonction du paramètre Mode_basculement de la ressource, il est possible que cela entraîne un redémarrage abrupt du nœud du cluster par le RGM. Il est donc important de concevoir la méthode Stop de manière qu'elle tente vraiment d'arrêter l'application, même en y mettant fin brutalement (par exemple, à l'aide d'un signal 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 Stop_timeout comme un échec de l'arrêt et fait donc passer la ressource à l'état STOP_FAILED.
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 œuvre 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 Start ou par un autre biais), la méthode Stop peut être mise en œuvre 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 œuvre de la méthode Stop, parce que, même si le système rencontre actuellement un problème, cette méthode doit tenter d'arrêter l'application sur ce nœud.