La función restart_service() la invoca decide_restart_or_failover() para intentar reiniciar el servicio de datos en el mismo nodo. Esta función realiza lo siguiente:
Determina si el servicio de datos sigue registrado bajo PMF. Si el servicio sigue registrado, la función:
Obtiene el nombre del método Stop y el valor Stop_timeout del servicio de datos.
Utiliza hatimerun para ejecutar el método Stop para el servicio de datos, pasando el valor Stop_timeout.
(Si el servicio de datos se detiene satisfactoriamente) obtiene el nombre del método Start y el valor Start_timeout para el servicio de datos.
Utiliza hatimerun para ejecutar el método Start para el servicio de datos, pasando el valor Start_timeout.
Si el servicio de datos ya no está registrado bajo PMF, ello quiere decir que el servicio de datos ha superado el número máximo de reintentos permitidos según PMF, por lo que la función scha_control() se invoca con la opción GIVEOVER para realizar una operación de recuperación de fallos del servicio de datos a otro nodo.
function restart_service { # Para reiniciar el servicio de datos, comprobar primero que # éste siga registrado en PMF. pmfadm -q $PMF_TAG if [[ $? -eq 0 ]]; then # Dado que TAG para el servicio de datos sigue registrado # en PMF, detener el servicio de datos y volver a iniciarlo. # Obtener el nombre del método Stop y el valor de STOP_TIMEOUT # para este recurso. STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ STOP_METHOD=`scha_resource_get -O STOP \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ hatimerun -t $STOP_TIMEOUT $RT_BASEDIR/$STOP_METHOD \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME \ -T $RESOURCETYPE_NAME if [[ $? -ne 0 ]]; then logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \ “${ARGV0} Stop method failed.” return 1 fi # Obtener el nombre del método START y el valor # de START_TIMEOUT para este recurso. START_TIMEOUT=`scha_resource_get -O START_TIMEOUT \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ START_METHOD=`scha_resource_get -O START \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ hatimerun -t $START_TIMEOUT $RT_BASEDIR/$START_METHOD \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME \ -T $RESOURCETYPE_NAME if [[ $? -ne 0 ]]; then logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \ “${ARGV0} Método de inicio no satisfactorio.” return 1 fi else # La ausencia de TAG para el servicio de datos # implica que el servicio de datos ya ha superado el # número máximo de reintentos permitidos en PMF. # No intentar reiniciar el servicio de datos otra vez; # intentar realizar una operación de recuperación de # fallos a otro nodo del clúster. scha_control -O GIVEOVER -G $RESOURCEGROUP_NAME \ -R $RESOURCE_NAME fi return 0 } |