L'objectif de la méthode de rappel Validate de la mise en oeuvre d'un type de ressource est de vérifier que les paramètres de ressource proposés (tels que spécifiés par les paramètres de propriété proposés pour la ressource) sont acceptables pour le type de ressource.
La méthode Validate de mise en oeuvre d'un type de ressource est appelée par le gestionnaire RGM (Resource Group Manager) dans l'un des deux cas suivants :
création d'une ressource du même type ;
mise à jour d'une propriété de la ressource ou du groupe de ressources.
Ces deux scénarios se distinguent par la présence de l'option de ligne de commande -c (création) ou -u (mise à jour) transmise à la méthode Validate de la ressource.
La méthode Validate est appelée sur chaque élément d'un jeu de noeuds défini par la valeur de la propriété Init_nodes du type de ressource. Si Init_nodes a la valeur RG_PRIMARIES , Validate est appelé sur chaque noeud pouvant héberger (en tant que primaire) le groupe contenant la ressource. Si Init_nodes a la valeur RT_INSTALLED_NODES, Validate est appelé sur chaque noeud où est installé le logiciel de type de ressource, généralement tous les noeuds du cluster.
La valeur par défaut de Init_nodes est RG_PRIMARIES (voir la page de manuel rt_reg(4)). Au moment où la méthode Validate est appelée, le gestionnaire RGM n'a pas encore créé la ressource (dans le cas d'un rappel de création) ou n'a pas encore appliqué les valeurs mises à jour des propriétés actualisées (dans le cas d'un rappel de mise à jour).
Si vous utilisez des systèmes de fichiers locaux gérés par le type de ressource HAStoragePlus, vous utilisez la fonction scds_hasp_check() pour vérifier l'état de ce type de ressource. Ces informations sont obtenues à partir de l'état (en ligne ou autre) de toutes les ressources SUNW.HAStoragePlus dont dépend la ressource, à l'aide des propriétés système Resource_dependencies ou Resource_dependencies_weak définies pour cette ressource. Reportez-vous à la page de manuel scds_hasp_check(3HA) pour obtenir une liste complète des codes d'état renvoyés par la fonction scds_hasp_check ().
La fonction DSDL scds_initialize() gère ces situations de la manière suivante :
Dans le cas d'une création de ressource, scds_initialize() analyse les propriétés proposées pour la ressource, telles qu'elles sont transmises sur la ligne de commande. Les valeurs proposées pour les propriétés de ressources sont donc disponibles comme si la ressource avait déjà été créée dans le système.
Dans le cas d'une mise à jour de la ressource ou du groupe de ressources, les valeurs proposées pour les propriétés qui sont mises à jour par l'administrateur du cluster sont lues depuis la ligne de commande. Les autres propriétés (dont les valeurs ne sont pas actualisées) sont lues depuis Sun Cluster à l'aide de l'API de gestion des ressources. Si vous utilisez la DSDL, vous n'avez pas besoin de vous préoccuper de ces tâches. Vous pouvez valider une ressource comme si toutes les propriétés de la ressource étaient disponibles.
Supposons que la fonction qui met en oeuvre la validation des propriétés d'une ressource s'appelle svc_validate(), et qu'elle utilise la famille de fonctions scds_get_name() pour examiner la propriété qu'elle doit valider. En admettant qu'un paramètre de ressource acceptable soit représenté par un code de retour 0 émis par cette fonction, la méthode Validate du type de ressource peut alors être représentée par le fragment de code suivant :
int main(int argc, char *argv[]) { scds_handle_t handle; int rc; if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Initialization Error */ } rc = svc_validate(handle); scds_close(&handle); return (rc); }
La fonction de validation doit également consigner le motif de l'échec de la validation de la ressource. Toutefois, pour aller à l'essentiel (vous trouverez au Chapitre 8, Mise en oeuvre du type de ressource DSDL modèle des informations plus réalistes sur la fonction de validation), un exemple plus simple de la fonction svc_validate() peut être mis en oeuvre de la manière suivante :
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); /* Invalid resource property setting */ } return (0); /* Acceptable setting */ }
Vous ne devez donc vous préoccuper que de la mise en oeuvre de la fonction svc_validate().