close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 14 years ago

Closed 14 years ago

Last modified 14 years ago

#1125 closed defect (fixed)

Compatibilidad de un paquete con una versión de TOL

Reported by: Víctor de Buen Remiro Owned by: Víctor de Buen Remiro
Priority: highest Milestone: TOL Packages
Component: Various Version: head
Severity: blocker Keywords:
Cc:

Description

Hasta ahora sólo se requería una versión mínima de TOL a partir de la cual un paquete se suponía que iba a funcionar para siempre, es decir, que la compatibilidad hacia atrás se da por hecha.

Sin embargo está claro que ese objetivo no es nada realista, especialmente en el caso de los paquetes que incorporan funciones built-in escritas en C++, ya que en caso de haber una cambio estructural como que se añada o se quite un miembro o una función virtual de cualquiera de las clases manejadas por TOL y usadas en el paquete, se produce una situación de incompatibilidad binaria en ambos sentidos temporales que requiere recompilar el paquete aún cuando no haya cambiado ni una línea de código en el mismo.

Es decir, hay que crear una versión nueva del paquete que será incompatible con la versión vieja de TOL, pero la versión vieja del paquete será también incompatible con la nueva de TOL.

Como ahora mismo el sistema gestor de paquetes lo que hace es traerse el último paquete supuestamente compatible con la versión actual, lo que ocurriría es que los usuarios que no se actualizaran a la nueva versión de TOL se acabarían bajándo paquetes incompatibles que les darían graves problemas que sólo podrían resolver bajando manualmente paquetes que habría que especificarles personalmente.

Se hace necesario un nuevo campo te_max_tol_version en cada paquete que nos diga cual es la versión máxima de TOL compatible con cada él, lo cual es a su vez incompatible con las actuales estructuras TOL TolPackage::@VersionSynchro y TolPackage::@PackageSynchro usadas para la sincronización de paquetes.

En la base de datos sin embargo no hay ningún problema pues la incorporación de nuevos campos no supone ninguna traba importante, salvo que los nuevos campos aparecen al final para no interrumpir el servicio. Como luego las queries pueden establer el orden que se desee esto no tiene ninguna importancia. Mientras el paquete siga siendo compatible con la versión actual de TOL y con los cambios planeados para las siguientes se puede expresar la ausencia de versión máxima estableciéndola como "v999999999999999999".

Aprovechando que se introducen estos cambios se añade otro campo te_extra_info tanto en la base de datos como en las estructuras TOL, en el cual se podrá introducir información extra en un futuro si se hace necesario, sin tener que modificar las estructuras de sincronización. Llegado el caso habría que pensar en como codificar el contenido de dicho campo pero de momento permanecerá vacío por lo que o hace falta perder tiempo en pensar en ello.

Los script PHP que dan acceso remoto a los repositorios deberán ahora distinguir la versión de TolPackage que le está haciendo la consulta para incluir o no los nuevos campos, mediante un argumento añadido tol_package_version que la especifique o por la ausencia del mismo. Para que en un futuro se puedan incorporar otras mejoras de este calibre, el valor de dicho argumento debe ser el de un nuevo miembro TolPackage::_.version

Change History (4)

comment:1 Changed 14 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: newclosed

(In [3307]) Fixes #1125
Fixes #1126
Refs #1127
Local repository depends on new member TolPackage::_.version

comment:2 Changed 14 years ago by Jorge

(In [3313]) refs #1125

comment:3 Changed 14 years ago by Jorge

(In [3315]) refs #1125

comment:4 Changed 14 years ago by Jorge

(In [3317]) refs #1125

Note: See TracTickets for help on using tickets.