Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Die Validate-Methode

Die Validate-Methode einer Ressourcentypimplementierung wird von RGM in zwei Szenarien aufgerufen: 1) wenn eine neue Ressource des Ressourcentyps erstellt wird, und 2) wenn eine Eigenschaft der Ressource bzw. der Ressourcengruppe aktualisiert wird. Diese beiden Szenarios können durch die Befehlszeilenoption -c (creation, Erstellung) bzw. -u (update, Aktualisierung) unterschieden werden, die an die Validate-Methode der Ressource übergeben werden.

Die Validate-Methode wird auf jedem Knoten einer Knotengruppe aufgerufen, wobei die Knotengruppe durch den Wert der Ressourcentypeigenschaft INIT_NODES definiert wird. Wenn INIT_NODES auf RG_PRIMARIES eingestellt ist, wird Validate auf jedem Knoten aufgerufen, der Host (Primärknoten) der die Ressource enthaltenden Ressourcengruppe sein kann. Wenn INIT_NODES auf RT_INSTALLED_NODES eingestellt ist, wird Validate auf jedem Knoten aufgerufen, auf dem die Ressourcentypsoftware installiert ist. Das sind normalerweise alle Knoten im Cluster. Der Standardwert für INIT_NODES ist RG_PRIMARIES (siehe rt_reg(4). Zu dem Zeitpunkt, an dem die Validate-Methode aufgerufen wird, hat RGM die Ressource noch nicht erstellt (im Fall einer Rückmeldungserstellung) bzw. hat die aktualisierten Werte der zu aktualisierenden Eigenschaften noch nicht angewendet (im Fall einer Rückmeldungsaktualisierung). Der Zweck der Validate-Rückmeldemethode einer Ressourcentypimplementierung ist es zu prüfen, ob die vorgeschlagenen Ressourceneinstellungen (angegeben durch die vorgeschlagenen Eigenschaftseinstellungen für die Ressource) für den Ressourcentyp akzeptabel sind.


Hinweis –

Wenn Sie von HAStoragePlus verwaltete lokale Dateisysteme verwenden, wird mit dem Befehl scds_hasp_check der Zustand der HAStoragePlus-Ressource überprüft. Diese Informationen werden aus dem Zustand (online oder anderweitig) aller SUNW.HAStoragePlus(5)-Ressourcen abgerufen, von denen die Ressource abhängt, und zwar unter Verwendung der für die Ressource definierten Systemeigenschaften Resource_dependencies oder Resource_dependencies_weak. .Unter scds_hasp_check(3HA) finden Sie eine vollständige Liste der vom scds_hasp_check-Aufruf zurückgegebenen Statuscodes.


Die DSDL-Funktion scds_initialize() verfährt in diesen Situationen folgendermaßen:

Angenommen, die Funktion, welche die Validierung der Eigenschaften einer Ressource implementiert, wird als svc_validate() bezeichnet und verwendet die scds_get_Name()-Funktionsfamilie zum Untersuchen der Eigenschaft, die validiert werden soll. Ferner wird angenommen, dass eine akzeptable Ressourceneinstellung durch einen Rückgabecode von 0 von dieser Funktion dargestellt wird. Die Validate-Methode kann dann durch das folgende Codefragment dargestellt werden:


int
main(int argc, char *argv[])
{
   scds_handle_t handle;
   int rc;

   if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) {
   return (1);   /* Initialisierungsfehler */
   }
   rc = svc_validate(handle);
   scds_close(&handle);
   return (rc);
}

Die Validierungsfunktion muss auch den Grund für den Fehlschlag der Ressourcenvalidierung protokollieren. Ohne auf weitere Einzelheiten einzugehen (im folgenden Kapitel sehen Sie eine realistischere Darstellung einer Validierungsfunktion), kann ein einfaches Beispiel einer svc_validate()-Funktion folgendermaßen implementiert werden:


int
svc_validate(scds_handle_t handle)
{
   scha_str_array_t *confdirs;
   struct stat    statbuf;
   confdirs = scds_get_confdir_list(handle);
   if (stat(confdirs->str_array[0], &statbuf) == -1) {
   return (1);   /* Ungültige Ressourceneigenschaftseinstellung */
   }
   return (0);   /* Akzeptable Einstellung */
}

Der Ressourcentypentwickler muss sich also nur um die Implementierung der svc_validate()-Funktion kümmern. Ein typisches Beispiel für eine Ressourcentypimplementierung wäre die Prüfung, ob eine Anwendungskonfigurationsdatei mit dem Namen app.conf unter der Confdir_list-Eigenschaft vorhanden ist. Sie kann einfach durch einen stat()-Systemaufruf an den entsprechenden Pfadnamen, abgeleitet aus der Confdir_list-Eigenschaft, implementiert werden.