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 15 years ago

Closed 14 years ago

Last modified 14 years ago

#949 closed task (fixed)

Migración de repositorios a bases de datos

Reported by: Víctor de Buen Remiro Owned by: Víctor de Buen Remiro
Priority: highest Milestone: TOL Packages
Component: Kernel Version:
Severity: blocker Keywords:
Cc: Pedro Gea, Jorge

Description

El actual sistema de repositorios de paquetes basados en directorios remotos con fichero de índice en ASCII no facilita la actualización, modificación, alta y baja de paquetes sueltos y no garantiza la integridad referencial, especialmente en caso de accesos simultáneos.

Para solucionar este tipo de problemas la forma más natural es utilizar una base de datos pues de seguir evolucionando el sistema actual casi habría que reinventarlas.

El nuevo sistema de repositorios deberá convivir un tiempo con el actual por lo que lo mejor será crearlo como un nuevo NameBlock TolPackagesDb que replique los comportamientos de la parte cliente de forma que los cambios sean mínimos para los usuarios, pero que aporte una API del lado servidor más fácil de usar y mucho más robusta que incluiría al menos estas características:

//Crea el .oza + los recursos + el register y lo comprime en un zip
Real TolPackageDb::Server::CreateLocalPackage(Text sourcePath, Text destinPath);

Class TolPackageDb::Server::@Repository
{
  @DBConnection _.connection;

  //Extrae el register del .zip y ejecuta las queries de inserción
  Real Upload(Text packagePath);

  //Extrae el register del .zip y ejecuta las queries de borrado
  //Si no se pasa número de versión se borra todo.
  Real Remove(Text package);

  Static New(parámetros de conexión)

};

En principio no habría necesidad de eliminar la posibilidad de que un usuario externo siguiera creando y manteniendo sus propios repositorios basados en directorios y ficheros ASCII pues si estos no son muy grandes y no hay muchos desarrolladores es un sistema más que suficiente. Ambos tipos de repositorios pueden convivir sin problemas pero lo que no se va a hacer es tener replicado para siempre el repositorio oficial de tol-project, sino que pasado un corto periodo de adaptación se quedará únicamente el de base de datos.

Por motivos de seguridad la parte cliente no debe tener acceso directo a la base de datos del repositorio sino que se debe hacer de forma indirecta usando algún script tipo PHP que cree las consultas a partir de una URL con el formato adecuado.

Además de la información auxiliar del paquete (fecha, descripción, versión, etc.) la tabla principal deberá contener en cada registro el paquete propiamente dicho, es decir, el fichero .zip incrustado en un campo blob.

Change History (8)

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

Cc: Pedro Gea Jorge added
Status: newaccepted

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

(In [2567]) Refs #949
Funcoines de codificación en Base64

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

(In [2570]) Refs #949
DecodeBase64ToFile and EncodeBase64FromFile

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

(In [2577]) Refs #949

LastCompatible no usa el conjunto TolPackage::Client::@Repository::_.allPackages sino el propio directorio TolPackage::Client::_.localRoot para buscar la última versión disponible localmente para un paquete dado

El nuevo método InstallFromLocalZip Instala un paquete desde un archivo local comprimido con extensión .zip

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

(In [2579]) Refs #949

Nuevo método BuildPackage para la creación del paquete .zip
Nuevo método UploadPackageFromLocalZip para la subida de paquetes a un repositorio en una base de datos remota

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

(In [2585]) Refs #987
Refs #949

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

Resolution: fixed
Status: acceptedclosed

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

Note: See TracTickets for help on using tickets.