La méthode xfonts_probe met une boucle en œuvre. Avant cela, xfonts_probe :
Récupère les ressources d'adresses réseau de la ressource xfnts de la manière suivante :
/* Obtention des adresses IP disponibles pour cette ressource */
if (scds_get_netaddr_list(scds_handle, &netaddr)) {
scds_syslog(LOG_ERR,
"No network address resource in resource group.");
scds_close(&scds_handle);
return (1);
}
/* Renvoi d’une erreur en l’absence de ressources réseau */
if (netaddr == NULL || netaddr->num_netaddrs == 0) {
scds_syslog(LOG_ERR,
"No network address resource in resource group.");
return (1);
}
Appelle scds_fm_sleep() et transmet la valeur de Thorough_probe_interval sous la forme du délai imparti. La sonde passe en mode de sommeil pendant le délai défini par Thorough_probe_interval entre les sondages.
timeout = scds_get_ext_probe_timeout(scds_handle);
for (;;) {
/*
* Sommeil pendant une durée d'Intervalle_sonde_complet entre les
* sondages successifs.
*/
(void) scds_fm_sleep(scds_handle,
scds_get_rs_thorough_probe_interval(scds_handle));
La méthode xfnts_probe met la boucle en œuvre de la manière suivante :
for (ip = 0; ip < netaddr->num_netaddrs; ip++) {
/*
* Obtention du nom d’hôte et du port sur lesquels
* la santé a été surveillée.
*/
hostname = netaddr->netaddrs[ip].hostname;
port = netaddr->netaddrs[ip].port_proto.port;
/*
* HA-XFS ne prend en charge qu’un seul port
* et obtient la valeur du port depuis la
* première entrée du tableau des ports.
*/
ht1 = gethrtime(); /* Blocage du délai de démarrage du sondage */
scds_syslog(LOG_INFO, "Probing the service on port: %d.", port);
probe_result =
svc_probe(scds_handle, hostname, port, timeout);
/*
* Mise à jour de l’historique des sondages du service,
* action si nécessaire.
* Blocage du délai de fin du sondage.
*/
ht2 = gethrtime();
/* Conversion en millisecondes */
dt = (ulong_t)((ht2 - ht1) / 1e6);
/*
* Calcul de l’historique des pannes
* et action si nécessaire
*/
(void) scds_fm_action(scds_handle,
probe_result, (long)dt);
} /* Chaque ressource réseau */
} /* Toujours continuer le sondage */
La fonction svc_probe() met la logique de sondage en œuvre. La valeur retournée par svc_probe() est transmise à scds_fm_action(), qui détermine s’il convient de redémarrer l’application, de basculer le groupe de ressources ou de ne rien faire.