El método xfonts_probe implementa un bucle. Antes de hacerlo, xfonts_probe ejecuta estas acciones:
Recupera los recursos de dirección de red para el recurso xfnts, como se indica a continuación.
/* Obtener la dirección ip disponible para este recurso */
if (scds_get_netaddr_list(scds_handle, &netaddr)) {
scds_syslog(LOG_ERR,
"No existe un recurso de dirección de la red en el
grupo de recursos.");
scds_close(&scds_handle);
return (1);
}
/* Devolver un error si no hay recursos de red */
if (netaddr == NULL || netaddr->num_netaddrs == 0) {
scds_syslog(LOG_ERR,
"No existe un recurso de dirección de la red en el
grupo de recursos.");
return (1);
}
Llama a scds_fm_sleep() y pasa el valor de Thorough_probe_interval como valor de tiempo de espera. El análisis reposa durante el valor de Thorough_probe_interval.
timeout = scds_get_ext_probe_timeout(scds_handle);
for (;;) {
/*
* reposo durante un tiempo de thorough_probe_interval entre
* análisis sucesivos.
*/
(void) scds_fm_sleep(scds_handle,
scds_get_rs_thorough_probe_interval(scds_handle));
El método xfnts_probe implementa el bucle como sigue:
for (ip = 0; ip < netaddr->num_netaddrs; ip++) {
/*
* Tomar el nombre de sistema y puerto en el que se va a
* supervisar el estado.
*/
hostname = netaddr->netaddrs[ip].hostname;
port = netaddr->netaddrs[ip].port_proto.port;
/*
* HA-XFS admite un solo puerto y obtiene el
* valor del puerto de la primera
* entrada de la matriz de puertos.
*/
ht1 = gethrtime(); /* Bloquear el tiempo de inicio del análisis */
scds_syslog(LOG_INFO, "Analizar el servicio en el puerto: %d.", port);
probe_result =
svc_probe(scds_handle, hostname, port, timeout);
/*
* Actualizar historial de análisis de servicio,
* tomar medidas si fuera necesario.
* Bloquear el tiempo de finalización del análisis.
*/
ht2 = gethrtime();
/* Convertir a milisegundos */
dt = (ulong_t)((ht2 - ht1) / 1e6);
/*
* Calcular el historial de fallos y tomar
* medidas si corresponde
*/
(void) scds_fm_action(scds_handle,
probe_result, (long)dt);
} /* Cada recurso de red */
} /* Seguir analizando indefinidamente */
La función svc_probe() implementa la lógica del análisis. El valor de retorno de svc_probe() se pasa a scds_fm_action(), que determina si debe reiniciar la aplicación, realizar una recuperación de fallos del grupo de recursos o si no debe hacer nada.