Bug con perfiles de datos al actualizar un proyecto en producción

Hola!
Estoy teniendo un inconveniente con perfiles de datos cuando quiero actualizar un proyecto que se encuentra en producción utilizando el instalador web y la acción actualizar.
Cuando se realiza el procedimiento de actualización, si hay al menos un perfil de datos en el proyecto se produce el siguiente error:


 Error en la migración de datos.SQLSTATE[23503]: 
Foreign key violation: 7 ERROR: inserción o actualización en la tabla «apex_usuario_proyecto_perfil_datos» viola la llave foránea «apex_usu_proy_pd_fk_perf_dat» 
DETAIL: La llave (proyecto,usuario_perfil_datos)=(nombre_proyecto,7) no está presente en la tabla «apex_usuario_perfil_datos».

Si se eliminan los perfiles de datos y se vuelve a ejecutar el instalador web, el proceso de actualización se realiza correctamente.
Como observación, estuve haciendo un pequeño seguimiento del bug y ocurre en la clase toba_lib, en el método cargar_instancia() y en la linea


$errores = $this->entorno_toba->get_instancia('produccion')->cargar_autonomo();

Alguna observación de que se puede hacer para evitar este posible bug al actualizar un proyecto en producción?

Saludos,
Fernando

Hola Fernando, veamos si podemos ir recopilando algunas pistas sobre que puede estar sucediendo. Necesitaría que me digas:

  • Que versión de toba estas utilizando? El instalador es un empaquetado de algún proyecto del SIU o es propio?
  • Se han editado perfiles funcionales en producción? En cualquier caso me gustaría que verifiques si existe el flag es_produccion en el archivo instalacion.ini y que valor tiene. Y que además te fijes si existe el flag usar_perfiles_propios (y que valor tiene) en instalacion/instancia.ini
  • Seguramente ésta pregunta la responderá según lo que hayas contestado en las anteriores pero existe una carpeta instalacion/permisos?

Saludos.

Hola Rodrigo, paso a responderte los items que solicitas:

  • La versión del toba es la 1.5, el empaquetado se realizo utilizando el comando: toba proyecto empaquetar -p proyecto…, es el empaquetador estándar del toba ( luego se usa la acción actualizar).
  • El problema no es con perfiles funcionales, son con los perfiles de datos, y respecto a esto comento ocurre los siguiente: en la aplicación desde una operación de administración de usuarios se crean y asocian en simultaneo los perfiles de datos a los usuarios de acuerdo a la configuración seleccionada (los perfiles de datos creados son los del toba propiamente), tanto con el empaquetador al actualizar un proyecto en producción, como en instancia de desarrollo al regenerar el proyecto si el perfil de datos del proyecto no existe en los archivos /metadatos/permisos/apex_usuario_perfil_datos.sql y /metadatos/permisos/apex_usuario_perfil_datos_dims.sql, se produce el mismo error. Si uno elimina los perfiles de datos del toba, se actualiza y regenera bien.
  • Como observación, si se exportan los metadatos ( y en consecuencia los perfiles de datos), luego se actualiza el proyecto y después regenera, funciona bien para la instancia de desarrollo, el inconveniente es que al actualizar una instalación en producción con el instalador web y la acción actualizar, aparentemente no se están manteniendo los perfiles de datos creados localmente.

Desde ya muchas gracias por responder, quedo a la espera de sugerencias :slight_smile:

Saludos,
Fernando

Hola!
Tenés actualizada en ambos lados la versión de toba 1.5?
Con Rodrigo estuvimos atrás de un problema similar pero con restricciones funcionales. Y no usaba el instalador, sino que la actualización en producción la hacíamos en forma manual (svn a pedal :P).
Lo corrigío, no recuerdo en que revisión, y hubo que regenerar la instancia ya que hubo cambio importantes.
Si está actualizada, probablemente dependas de los flags que te indicó Rodrigo.
Espero tirar alguna línea que pueda servirles para solucionar el problema.

Hola Fernando, como bien dice Martín, vos te actualizaste a la última versión de toba antes de empaquetar? Te digo esto porque eso cambio bastante. Deberías apuntar a la última versión de toba en trunk_versiones/1.5 y luego regenerar la instancia para luego si empaquetar nuevamente el proyecto para actualizar. Aún así podrías llegar a tener inconvenientes ya que las dos versiones de toba difieren. Es decir, por un lado la que tenés instalada en producción y por otro la que vas a tener en desarrollo. Justamente estos cambios solucionan un bug importante en la exportación de perfiles en producción.

Para tratar de ayudarte con los próximos pasos, me podrías decir si en producción se definieron nuevos perfiles de datos/dimensiones/perfiles funcionales?

Saludos.

Hola Rodrigo y Martín! les comento que hice las siguientes pruebas con el empaquetado:

Instalé el proyecto con una versión anterior del toba simulando un esquema en producción

Actualice el toba a la última versión y regeneré la instancia

Generé un empaquetado con la actualización usando la nueva versión del toba y lo apliqué (de esta forma estaría actualizado las librerías del toba)

En la aplciación agregué los perfiles de datos y volví a generar otro empaquetado con una segunda actualización, y al querer aplicar la actualización me dio el mismo error de perfiles de datos que comente anteriormente…

Respecto a lo que preguntas Rodrigo, los perfiles de datos son creados y asociados a usuarios desde la propia aplicación, si uno elimina los perfiles de datos si actualiza bien, pero es un proceso muy costoso en instalaciones donde hay muchos usuarios y perfiles creados…

Desde ya muchas gracias por las respuestas :).

Saludos,
Fernando

Hola! por lo que decís el origen del problema es el mismo (capaz se corrigió para restricciones funcionales y no para perfiles de datos).
Pero de todas formas, te comento que para que aplicaran los cambios tuve que actualizar toba (lo tengo por svn tanto en producción como en desarrollo), y regenerar la instancia. De esa forma apliqué los cambios y a partir de eso se comenzó a diferenciar usuarios, perfiles funcionales y restricciones funcionales de desarrollo de lo de producción (respetando lo de producción, flag es_producción=1). Esto me consta, y está funcionando sin problemas. Eso si, no utilizo el instalador (nada muy automático es de mi confianza… jeje… trastornos obsesivos compulsivos que uno tiene), actualizo la carpeta del proyecto, regenero y compilo (en mi caso).