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.