El método Validate de una implementación de tipo de recurso es invocado por RGM si se da una de las siguientes condiciones:
Se está creando un nuevo recurso del tipo de recurso
Se está actualizando una propiedad del recurso o del 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 de rellamada 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.
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:
En el caso de creación de recursos, analiza las propiedades propuestas para el recurso, como se han pasado a la línea de comandos. Los valores propuestos para las propiedades del recurso quedan disponibles para el desarrollador del tipo de recurso como si éste ya se hubiera creado en el sistema.
En el caso de una actualización del recurso o el grupo de recursos, los valores propuestos de las propiedades que está actualizando el administrador se leen en la línea de órdenes y el resto de las propiedades (cuyos valores no se están actualizando) se leen de Sun Cluster con la API de gestión de recursos (RMAPI). Un desarrollador de tipo de recursos que utilice DSDL no tendrá que preocuparse de todas estas tareas domésticas. La validación de un recurso se puede realizar como si todas las propiedades del recurso estuvieran disponibles para el desarrollador.
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.