Il existe deux scénarios pour l'appel par le RGM de la méthode de Validation dans le cadre de la mise en oeuvre d'un type de ressource : 1) à la création d'une nouvelle ressource d'un type donné et 2) à la 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 de Validation de la ressource.
La méthode de Validation est appelée sur chaque membre d'un jeu de noeuds défini par la valeur de la propriété NOEUDS_INIT du type de ressource. Si NOEUDS_INIT a la valeur ÉLÉMENTS_PRINCIPAUX_GR, Validation est appelée sur chaque noeud pouvant héberger (en tant que primaire) le groupe contenant la ressource. Si NOEUDS_INIT a la valeur NOEUDS_INSTALLÉS_TR , Validation est appelée sur chaque noeud où est installé le logiciel du type de ressource, généralement tous les noeuds du cluster. La valeur par défaut de NOEUDS_INIT est ÉLÉMENTS_PRINCIPAUX_GR (reportez-vous à rt_reg(4)). Au moment où la méthode de Validation est appelée, le 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 pour la propriété actualisée (dans le cas d'un rappel de mise à jour). L'objectif de la méthode de rappel de Validation pour la mise en oeuvre d'un type de ressource consiste à vérifier que les paramètres de la ressource (tels que spécifiés par les valeurs proposées pour les propriétés de la ressource) sont acceptables pour le type de ressource
si vous utilisez des systèmes de fichiers locaux gérés par HAStoragePlus, vous employez la commande scds_hasp_check pour vérifier l'état de la ressource HAStoragePlus. Ces informations sont obtenues à partir de l'état (en ligne ou autre) de toutes les ressources SUNW.HAStoragePlus(5) dont dépend la ressource à l'aide des propriétés système Dépendances_ressource ou Dépendances_ressource_faibles définies pour la ressource. Reportez-vous à scds_hasp_check(3HA) pour obtenir une liste complète des codes d'état renvoyés par l'appel scds_hasp_check.
La fonction BDSD scds_initialize() gère ces situations de la manière suivante :
Dans le cas de la création d'une ressource, elle 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 la ressource sont donc disponibles pour le développeur du type de ressource comme si la ressource avait déjà été créée dans le système.
Dans le cas de la mise à jour d'une ressource ou d'un groupe de ressources, les valeurs proposées pour les propriétés mises à jour par l'administrateur sont lues depuis la ligne de commande, et les autres propriétés (dont les valeurs ne sont pas modifiées) sont lues depuis Sun Cluster à l'aide de l'API de gestion des ressources. Un développeur du type de ressource utilisant BDSD ne doit pas se préoccuper de ces tâches administratives. La validation d'une ressource peut s'effectuer comme si toutes les propriétés de la ressource étaient à la disposition du développeur.
Supposons que la fonction mettant en oeuvre la validation des propriétés d'une ressource s'appelle svc_validate() et utilise la famille de fonctions scds_get_nom() 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 de Validation du type de ressource peut donc être représentée par le fragment de code suivant :
in tmain(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. Pour aller à l'essentiel (vous trouverez au chapitre suivant des informations plus réalistes sur la fonction de validation) un exemple 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 */ } |
Le développeur du type de ressource ne doit donc se préoccuper que de la mise en oeuvre de la fonction svc_validate(). Un exemple typique de la mise en oeuvre d'un type de ressource viserait à s'assurer qu'un fichier de configuration d'application appelé app.conf existe sous la propriété Liste_rép_conf. Cette vérification peut être facilement mise en oeuvre par un appel système stat() effectué sur le nom de chemin d'accès approprié, dérivé de la propriété Liste_rép_conf.