RGM invoca el método de rellamada Stop de una implementación del tipo de recurso en un nodo del clúster para detener la aplicación. La semántica de rellamada del método Stop requiere los siguientes factores:
El método Stop ha de ser idempotent, ya que RGM lo puede invocar aun cuando el método Start no se haya completado satisfactoriamente en el nodo. De esta manera, el método Stop debe completarse con éxito (resultado cero), aunque la aplicación no se esté ejecutando actualmente en el nodo del clúster y no haya ningún acción que realizar.
Si el método Stop del tipo de recurso falla (resultado distinto a cero) en un nodo del clúster, el recurso que se va a detener presentará el estado STOP_FAILED. En función de la configuración de Failover_mode en el recurso, es posible que esta condición provoque que RGM realice un reinicio completo del nodo del clúster.
Por lo tanto, debe diseñar el método Stop para que detenga la aplicación por completo. Es posible que deba utilizar SIGKILL para desactivar la aplicación abruptamente en caso de que no se pueda finalizar.
Debe también asegurarse de que este método detenga la aplicación de forma oportuna, ya que la estructura considera el tiempo de caducidad indicado en la propiedad Stop_timeout como un error del proceso de parada y, por lo tanto, establece el recurso en el estado STOP_FAILED.
La utilidad scds_pmf_stop() de DSDL debería bastar para la mayoría de las aplicaciones, ya que, en primer lugar, intenta detener con cautela la aplicación mediante SIGTERM . Esta función envía a continuación SIGKILL al proceso. Esta función supone que la aplicación se ha iniciado bajo el control de PMF con scds_pmf_start(). Consulte Funciones de PMF para obtener información sobre esta utilidad.
Suponiendo que la función que detiene la aplicación se denomina svc_stop(), implemente el método Stop de la siguiente forma:
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Initialization Error */ } return (svc_stop(handle));
No es relevante que la implementación de la funicón svc_stop() anterior incluya o no la función scds_pmf_stop(). La inclusión (o no) de la función scds_pmf_stop() depende de si la aplicación se ha iniciado bajo el control de PMF mediante el método Start.
El métodosvc_validate() no se utiliza en la implementación del método Stop porque, aunque el sistema esté experimentando actualmente problemas, este último método debería intentar detener la aplicación en este nodo.