RGM ruft die Validate-Methode auf, wenn eine Ressource erstellt wird und wenn eine Verwaltungsaktion die Eigenschaften der Ressource bzw. deren Gruppe aktualisiert. RGM ruft Validate auf, bevor die Erstellung bzw. Aktualisierung angewendet wird. Ein Fehlerbeendigungscode der Methode auf einem Knoten führt zum Abbruch der Erstellung bzw. Aktualisierung.
RGM ruft Validate nur dann auf, wenn Ressourcen- bzw. Gruppeneigenschaften über eine Verwaltungsaktion geändert werden, und nicht, wenn RGM Eigenschaften einstellt oder wenn ein Monitor die Ressourceneigenschaften Status und Status_msg einstellt.
Die Monitor_check-Methode ruft auch ausdrücklich jedes Mal dann die Validate-Methode auf, wenn die PROBE-Methode versucht, ein Failover für den Datendienst auf einen neuen Knoten auszuführen.
RGM ruft Validate mit zusätzlichen Argumenten zu denjenigen auf, die von anderen Methoden übergeben wurden, einschließlich der aktualisierten Eigenschaften und Werte. Bei Aufruf von scds_initialize() zu Beginn von xfnts_validate werden alle Argumente analysiert, die RGM an xfnts_validate übergibt, und die Informationen werden im scds_handle-Parameter gespeichert. Die Unterroutinen, die xfnts_validate aufruft, verwenden diese Informationen.
Die xfnts_validate-Methode ruft svc_validate() auf, um Folgendes zu prüfen:
Die Confdir_list-Eigenschaft wurde für die Ressource eingestellt und definiert ein einziges Verzeichnis.
scha_str_array_t *confdirs; confdirs = scds_get_ext_confdir_list(scds_handle); /* Fehler zurückgeben, wenn keine confdir_list-Erweiterungseigenschaft * vorhanden ist if (confdirs == NULL || confdirs->array_cnt != 1) { scds_syslog(LOG_ERR, "Confdir_list-Eigenschaft ist nicht ordnungsgemäß eingestellt."); return (1); /* Validierungsfehlschlag */ }
Das von Confdir_list angegebene Verzeichnis enthält die fontserver.cfg-Datei.
(void) sprintf(xfnts_conf, "%s/fontserver.cfg", confdirs->str_array[0]); if (stat(xfnts_conf, &statbuf) != 0) { /* * lint-Fehler unterdrücken, da im errno.h-Prototyp * void-Argument fehlt */ scds_syslog(LOG_ERR, "Auf Datei <%s> konnte nicht zugegriffen werden: <%s>", xfnts_conf, strerror(errno)); /*lint !e746 */ return (1); }
Auf die Server-Dämon-Binärdatei kann auf dem Cluster-Knoten zugegriffen werden.
if (stat("/usr/openwin/bin/xfs", &statbuf) != 0) { scds_syslog(LOG_ERR, "Auf XFS-Binärdatei kann nicht zugegriffen werden: <%s> ", strerror(errno)); return (1); }
Die Port_list-Eigenschaft gibt einen einzigen Port an.
scds_port_list_t *portlist; err = scds_get_port_list(scds_handle, &portlist); if (err != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "Auf Port_list-Eigenschaft: %s konnte nicht zugegriffen werden.", scds_error_string(err)); return (1); /* Validierungsfehlschlag */ } #ifdef TEST if (portlist->num_ports != 1) { scds_syslog(LOG_ERR, "Port_list-Eigenschaft darf nur einen Wert enthalten."); scds_free_port_list(portlist); return (1); /* Validierungsfehlschlag */ } #endif
Die Ressourcengruppe, die den Datendienst enthält, verfügt auch über mindestens eine Netzwerkadressressource.
scds_net_resource_list_t *snrlp; if ((err = scds_get_rs_hostnames(scds_handle, &snrlp)) != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "Keine Netzwerkadressressource in Ressourcengruppe: %s.", scds_error_string(err)); return (1); /* Validierungsfehlschlag */ } /* Fehler zurückgeben, wenn keine Netzwerkadressressourcen vorhanden sind */ if (snrlp == NULL || snrlp->num_netresources == 0) { scds_syslog(LOG_ERR, "Keine Netzwerkadressressource in Ressourcengruppe."); rc = 1; goto finished; }
Vor der Rückgabe gibt svc_validate() alle zugewiesenen Ressourcen frei.
finished: scds_free_net_list(snrlp); scds_free_port_list(portlist); return (rc); /* Validierungsergebnis zurückgeben */
Vor der Beendigung ruft die xfnts_validate-Methode scds_close() auf, um die von scds_initialize() zugewiesenen Ressourcen zurückzufordern. Weitere Einzelheiten finden Sie unter scds_initialize()-Funktion und in der Online-Dokumentation unter scds_close(3HA).