RGM ruft beim Erstellen einer Ressource oder beim Aktualisieren der Eigenschaften der Ressource oder der enthaltenen Gruppe durch den Cluster-Administrator die Validate-Methode auf. 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 auf, wenn ein Cluster-Administrator die Ressourcen- ode Ressourcengruppeneigenschaften ändert oder wenn ein Monitor die Ressourceneigenschaften Status und Status_msg festlegt. RGM ruft Validate nicht auf, wenn RGM Eigenschaften festlegt.
Die Monitor_check-Methode ruft auch die Validate-Methode explizit auf, wenn die PROBE-Methode einen Failover-Versuch des Datendienstes an einen neuen Knoten unternimmt.
RGM ruft Validate mit zusätzlichen Argumenten zu denjenigen auf, die an andere Methoden übergeben werden, einschließlich der Eigenschaften und Werte, die aktualisiert werden. Der Aufruf von scds_initialize() am Anfang von xfnts_validate parst alle Argumente, die von RGM an xfnts_validate übergeben werden und speichert die Informationen im scds_handle-Argument. Die Subroutinen, die von xfnts_validate aufgerufen werden, verwenden diese Informationen.
Die xfnts_validate-Methode ruft svc_validate() auf, wodurch folgende Bedingungen geprüft werden:
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); /* Return error if there is no confdir_list extension property */ if (confdirs == NULL || confdirs->array_cnt != 1) { scds_syslog(LOG_ERR, "Property Confdir_list is not set properly."); return (1); /* Validation failure */ }
Das Verzeichnis, das von Confdir_list festgelegt wurde, enthält die Datei fontserver.cfg.
(void) sprintf(xfnts_conf, "%s/fontserver.cfg", confdirs->str_array[0]); if (stat(xfnts_conf, &statbuf) != 0) { /* * suppress lint error because errno.h prototype * is missing void arg */ scds_syslog(LOG_ERR, "Failed to access file <%s> : <%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, "Cannot access XFS binary : <%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, "Could not access property Port_list: %s.", scds_error_string(err)); return (1); /* Validation Failure */ } #ifdef TEST if (portlist->num_ports != 1) { scds_syslog(LOG_ERR, "Property Port_list must have only one value."); scds_free_port_list(portlist); return (1); /* Validation Failure */ } #endif
Die Ressourcengruppe, die den Datendienst enthält, enthält auch 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, "No network address resource in resource group: %s.", scds_error_string(err)); return (1); /* Validation Failure */ } /* Return an error if there are no network address resources */ if (snrlp == NULL || snrlp->num_netresources == 0) { scds_syslog(LOG_ERR, "No network address resource in resource group."); 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); /* return result of validation */
Vor der Beendigung ruft die xfnts_validate-Methode scds_close() auf, um Ressourcen wiederzuverwenden, die von scds_initialize () zugewiesen wurden. Im Abschnitt scds_initialize()-Funktion und in der Online-Dokumentation zu scds_close(3HA) finden Sie weitere Informationen.