Sun Cluster: Guía del desarrollador de los servicios de datos del sistema operativo Solaris

El método Validate

RGM llama al método Validate de una implementación de tipo de recurso en dos situaciones: 1) cuando se crea un nuevo recurso del tipo de recurso y 2) cuando se actualiza una propiedad del recurso o grupo de recursos. Estas dos situaciones se pueden distinguir por la presencia de la opción de la línea de órdenes -c (creación) o -u (actualización) que se pasa al método Validate del recurso.

El método Validate se invoca en todos los nodos de un conjunto definido por el valor de la propiedad del tipo de recurso INIT_NODES. Si se establece INIT_NODES en RG_PRIMARIES, Validate se invoca en todos los nodos que puedan alojar (ser principales de) el grupo de recursos que contiene el recurso en cuestión. Si se establece INIT_NODES en RT_INSTALLED_NODES, Validate se invoca en todos los nodos en los que está instalado el software del tipo de recurso, que suelen ser todos los nodos del clúster. El valor predeterminado de INIT_NODES es RG_PRIMARIES (consulte rt_reg(4). En el momento en que se invoca el método Validate, RGM no ha creado aún el recurso (en el caso de una rellamada de creación) o todavía no ha aplicado el o los valor(es) actualizado(s) de las propiedades que se van a actualizar (en el caso de una rellamada de actualización). El objetivo del método Validate de una implementación de tipo de recurso es comprobar que los valores propuestos para el recurso (tal como indica la configuración de la propiedad propuesta en el recurso) son aceptables para el tipo de recurso.


Nota –

Si está utilizando sistemas de archivo locales gestionados por HAStoragePlus, utilizará scds_hasp_check para comprobrar el estado del recurso HAStoragePlus. Esta información se obtiene del estado (en línea u otro) de todos los recursos SUNW.HAStoragePlus(5) de los que depende éste al utilizar las propiedades del sistema Resource_dependencies o Resource_dependencies_weak definidas para el mismo. Consulte scds_hasp_check(3HA) para obtener una lista completa de códigos de estado devueltos de la llamada scds_hasp_check.


La función scds_initialize() de DSDL se encarga de estas situaciones como sigue:

Supongamos que la función que implementa la validación de las propiedades de un recurso se llama svc_validate() y utiliza la familia de funciones scds_get_nombre() para ver la propiedad que interesa validar. Suponiendo que un valor de recurso aceptable se represente con un código de retorno 0 de esta función, el método Validate del tipo de recurso se puede representar con el siguiente fragmento de código:


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

   if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) {
   return (1);   /* Error de inicialización*/
   }
   rc = svc_validate(handle);
   scds_close(&handle);
   return (rc);
}

La función de validación debe también registrar el motivo del fallo en la validación del recurso. Dejando a un lado los detalles (si desea ver un tratamiento más realista de una función de validación, consulte el capítulo siguiente), un ejemplo sencillo de función svc_validate() se puede implementar como:


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);   /* Valor de propiedad de recurso no válido */
   }
   return (0);   /* Valor de configuración aceptable */
}

El desarrollador de tipos de recursos se debe encargar sólo de la implementación de la función svc_validate(). Un ejemplo típico de implementación de un tipo de recurso podría ser garantizar que un archivo de configuración de una aplicación denominado app.conf existiera dependiente de la propiedad Confdir_list. Esto se puede implementar convenientemente con una llamada de sistema stat() en el nombre de ruta adecuado, derivado de la propiedad Confdir_list.