Sun Cluster 3.1 10/03: Guía del desarrollador de los servicios de datos

El método Validate

RGM invoca el método Validate de una implementación de tipo de recurso en dos casos: 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 comandos -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á usando sistemas de archivos locales gestionados por HAStoragePlus, debe utilizar scds_hasp_check para comprobar el estado del recurso HAStoragePlus. Esta información se obtiene del estado (en línea u otro) de todos los recursos SUNW.HAStoragePlus(5) del que depende el recurso, utilizando las propiedades de sistema Resource_dependencies o Resource_dependencies_weak definidas para el recurso. Consulte scds_hasp_check(3HA) para ver una lista completa de códigos de estado que devuelve 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 representa 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:


in
tmain(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);   /* Configuración de propiedad de recurso no válida */
   }
   return (0);   /* 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.