Ids de Desarrollo
La asignación de números para desarrollar sistemas SIU se encuentra en el trac del siu
Configuración
Durante la instalación se pide ingresar este número. En caso de querer
cambiarlo manualmente modificar el valor de id_grupo_desarrollo
en instalacion/instalacion.ini
y regenerar la instancia. Es
importante que todos los desarrolladores de cada grupo verifique el
estado de esta configuración, ya que si alguno posee una configuración
distinta o no tiene ninguna puede traer problemas de sincronización a
todo el proyecto.
El Problema
El desarrollo de toba se hace sobre una Instancia, esta corre sobre una o más bases de datos relacionales. Cuando uno crea objetos u items se crean registros en esta base de datos representandolos. Tener una base de datos centralizada permite que varios desarrolladores en un mismo grupo trabajen forma simultánea sobre la misma, dejando que el motor controle la concurrencia de las operaciones.
Cuando se cuenta con más de un grupo muchas veces no es posible contar una base centralizada, especialmente cuando hay diferencias geográficas de por medio. Por lo que en general cada grupo cuenta con su propio motor exportando las definiciones en forma cotidiana al sistema de archivos, dejando que SVN se encargue del versionado y control de concurrencia de los mismos.
En este último esquema hay una traba grande, supogamos que dos grupos digamos Tandil y Bahía estén creando al mismo tiempo ítems separados para el mismo proyecto. Ocurriría lo siguiente
- Los dos grupos empiezan a desarrollar, teniendo como último item creado el número 49.
- El grupo Tandil crea un ítem, se le asigna el id 50
- Al mismo tiempo el grupo Bahía crea un ítem, también se le asigna el id 50 porque el motor local no tiene forma de comunicarse con el de Tandil y saber que ese número ya fue consumido.
- Los dos grupos exportan sus metadatos e intentan subirlo, ahí se produce un conflicto porque ambos quieren subir un item con el mismo Id con contenido totalmente distintos.
Este problema ocurre para todos los componentes que usan identificadores automáticos como secuencias (en postgres) o campos autoincrements.
La solución
La limitante a nivel técnico es que cada grupo utiliza las secuencias como forma unívoca de identificación, si cada grupo manejara un conjunto de identificadores separado, el problema no existiría, por ejemplo si se reservaran un millón de identificadores para cada uno:
- Los dos grupos empiezan a desarrollar, Bahía maneja los IDs desde 1.000.0000 hasta 2.000.000 y Tandil desde 2.000.000 hasta 3.000.000
- El grupo Tandil crea un ítem, se le asigna el id 2.000.001
- Al mismo tiempo el grupo Bahía crea un ítem, también se le asigna el id 1.000.001
- Los dos grupos exportan sus metadatos y los suben sin problemas