La fonction restart_service() est appelée par decide_restart_or_failover () pour tenter de redémarrer le service de données sur le même noeud. Cette fonction exécute la logique suivante :
Détermine si le service de données est toujours enregistré sous le PMF. Si le service est toujours enregistré, la fonction exécute les actions suivantes :
Obtient le nom de la méthode Stop et la valeur Stop_timeout pour le service de données.
Utilise hatimerun pour démarrer la méthode Stop du service de données, en lui passant la valeur Stop_timeout.
Si le service de données est correctement arrêté, obtient le nom de la méthode Start et la valeur Start_timeout pour le service de données.
Utilise hatimerun pour démarrer la méthode Start du service de données, en lui passant la valeur Start_timeout.
Si le service de données n'est plus enregistré sous le PMF, il est très probable qu'il a dépassé le nombre maximum de tentatives autorisées sous le PMF. La fonction scha_control() est appelée avec l'option GIVEOVER pour basculer le service de données sur un autre noeud.
function restart_service
{
# Pour redémarrer le service de données, vérifiez d'abord que
# le service de données lui-même est toujours enregistré sous le PMF.
pmfadm -q $PMF_TAG
if [[ $? -eq 0 ]]; then
# Comme le TAG pour le service de données est toujours enregistré
# sous le PMF, arrêtez d'abord le service de données, puis redémarrez-le.
# Récupérez le nom de la méthode d'arrêt et la valeur STOP_TIMEOUT
# pour cette ressource.
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
# Récupérez le nom de la méthode de démarrage et la valeur START_TIMEOUT
# pour cette ressource.
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} Start method failed.”
return 1
fi
else
# L'absence du TAG pour le service de données
# implique le service de données a déjà dépassé
# le nombre maximum de tentatives autorisées sous le PMF.
# Par conséquent, ne tentez pas de redémarrer le
# service de données, mais essayez de le basculer
# sur un autre noeud dans le cluster.
scha_control -O GIVEOVER -G $RESOURCEGROUP_NAME \
-R $RESOURCE_NAME
fi
return 0
}