La méthode xfonts_probe met une boucle en oeuvre. 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 Intervalle_sonde_complet sous la forme du délai imparti. La sonde passe en mode de sommeil pendant le délai défini par l'Intervalle_sonde_complet 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 oeuvre 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(); /* Latch probe start time */ 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 oeuvre. 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.