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 werden oder nichts geschehen soll.