Die xfonts_probe-Methode implementiert eine Schleife. Vor dem Implementieren der Schleife führt xfonts_probe folgende Aktionen aus:
Sie ruft die Netzwerkadressressourcen für die xfnts-Ressource folgendermaßen ab:
/* Für diese Ressource verfügbare IP-Adressen abrufen */
if (scds_get_netaddr_list(scds_handle, &netaddr)) {
scds_syslog(LOG_ERR,
"Keine Netzwerkadressressource in Ressourcengruppe.");
scds_close(&scds_handle);
return (1);
}
/* Fehler zurückgeben, wenn keine Netzwerkressourcen vorhanden sind */
if (netaddr == NULL || netaddr->num_netaddrs == 0) {
scds_syslog(LOG_ERR,
"Keine Netzwerkadressressource in Ressourcengruppe.");
return (1);
}
Sie ruft scds_fm_sleep() auf und übergibt den Wert von Thorough_probe_interval als den Zeitüberschreitungswert. Das Testsignal ruht zwischen den einzelnen Testvorgängen für den Wert von Thorough_probe_interval.
timeout = scds_get_ext_probe_timeout(scds_handle);
for (;;) {
/*
* Für die Dauer von thorough_probe_interval zwischen den
* einzelnen Testsignalen ruhen.
*/
(void) scds_fm_sleep(scds_handle,
scds_get_rs_thorough_probe_interval(scds_handle));
Die xfnts_probe-Methode implementiert die Schleife folgendermaßen:
for (ip = 0; ip < netaddr->num_netaddrs; ip++) {
/*
* Hostname und Port für Überwachung der
* Fehlerfreiheit erfassen.
*/
hostname = netaddr->netaddrs[ip].hostname;
port = netaddr->netaddrs[ip].port_proto.port;
/*
* HA-XFS unterstützt nur einen Port. Daher den Port-Wert
* aus dem ersten Eintrag im Port-Array
* abrufen.
*/
ht1 = gethrtime(); /* Testsignal-Startzeit festhalten */
scds_syslog(LOG_INFO, "Dienst auf Port: %d. testen", port);
probe_result =
svc_probe(scds_handle, hostname, port, timeout);
/*
* Testsignalhistorie des Dienstes aktualisieren,
* bei Bedarf Aktionen ausführen.
* Testsignal-Endzeit festhalten.
*/
ht2 = gethrtime();
/* In Millisekunden konvertieren */
dt = (ulong_t)((ht2 - ht1) / 1e6);
/*
* Fehlschlaghistorie berechnen und
* bei Bedarf Aktionen ausführen
*/
(void) scds_fm_action(scds_handle,
probe_result, (long)dt);
} /* Jede Netzressource */
} /* Endlos weitertesten */
Die svc_probe()-Funktion implementiert die Testsignallogik. Der Rückgabewert von svc_probe() wird an scds_fm_action() übergeben. Diese Funktion entscheidet, ob die Anwendung neu gestartet, ein Failover der Ressourcengruppe ausgeführt oder nichts geschehen soll.