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 Stop exige que les conditions suivantes soient remplies :
La méthode Stop doit être idempotente parce qu'elle peut être appelée par le gestionnaire RGM, même si la méthode Start n'a pas fonctionné correctement sur le noeud. Par conséquent, la méthode Stop doit aboutir (valeur zéro), même si l'application n'est pas en cours d'exécution sur le noeud de cluster et qu'elle n'a aucune tâche à accomplir.
Si la méthode Stop du type de ressource échoue (valeur différente de zéro) sur un noeud de cluster, la ressource qui est arrêtée passe à l'état STOP_FAILED. En fonction du paramètre Failover_mode de la ressource, ceci peut entraîner un redémarrage brutal du noeud de cluster par le RGM.
Vous devez donc concevoir la méthode Stop de manière à ce qu'elle arrête vraiment l'application. Vous devrez peut-être recourir à SIGKILL pour fermer l'application de manière brutale si la procédure de fermeture normale échoue.
Vous devez également vous assurer que cette méthode arrête l'application dans les temps, car la structure traite l'expiration de la propriété Stop_timeout comme un échec de l'arrêt et, par conséquent, fait passer la ressource à l'état STOP_FAILED.
L'utilitaire de la DSDL scds_pmf_stop() devrait suffire pour la plupart des applications, dans la mesure où il essaie d'abord d'arrêter l'application normalement avec SIGTERM . Cette fonction envoie ensuite un SIGKILL au processus. Elle considère que l'application a été démarrée par le gestionnaire de processus à l'aide de scds_pmf_start(). Pour en savoir plus sur cet utilitaire, reportez-vous à la section Fonctions PMF.
En supposant que la fonction spécifique à l'application qui doit arrêter cette dernière s'appelle svc_stop(), mettez en oeuvre la méthode Stop de la manière suivante :
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Erreur d'initialisation */ } return (svc_stop(handle));
Que la mise en oeuvre de la fonction précédente svc_stop() inclue ou non la fonction scds_pmf_stop() n’a pas d’importance. Cela dépend d'un éventuel démarrage de l’application par le gestionnaire de processus via la méthode Start.
La méthode svc_validate() n'est pas utilisée dans la mise en oeuvre de la méthode Stop car, même si le système rencontre un problème, la méthode Stop doit tenter d'arrêter l'application sur ce noeud.