Problemas en cambio de versión 3.7.0

Hola gente les comento que esta semana hicimos el cambio de versión a la 3.7.0 y se vé que tenemos algunos problemas de datos con los esquemas toba_mapuche y ahora surgió otro con toba_mapuche_logs.

Comienzo:

  1. Al hacer el cambio de versión nos tiró errores con un perfil de usuarios que accede al proyecto toba_usuarios (perfil de logs). nos tiró el siguiente error:
[2019-11-01 10:18:28] MAIN.ERROR: 0 - SQL ERROR: SQLSTATE[23503]: Foreign key violation: 7 ERROR: inserción o actualización en la tabla «apex_usuario_proyecto» viola la llave foránea «apex_usu_proy_fk_grupo_acc» DETAIL: La llave (proyecto, usuario_grupo_acc)=(toba_usuarios, logs) no está presente en la tabla «apex_usuario_grupo_acc». INSERT INTO apex_usuario_proyecto (proyecto, usuario_grupo_acc, usuario, usuario_perfil_datos) VALUES ('toba_usuarios', 'logs', 'prueba', NULL);
La solución que encontramos fue desvincular a todos los usuarios que tienen ese perfil funcional "logs" que accede al proyecto toba_usuarios. Luego hicimos el cambio de versión y el perfil funcional "logs"no fue creado por lo que volvimos a crearlo manualmente.

Como sé donde buscar que es lo que está haciendo ruido acá?

  1. Realizando el cambio de versión nos dió 2 errores mas en perfiles funcionales. Los perfiles “liquidacion” y “liquidacion_1” al parecer tenían errores de datos pero siguió el cambio de versión y terminó OK. Los mensajes que dieron fueron estos:
    log de postgresql
2019-11-01 10:00:41.373 -03 [2628] mapuche@siu DETALLE: La llave (proyecto, item)=(mapuche, 53000015) no está presente en la tabla «apex_item». 2019-11-01 10:00:41.373 -03 [2628] mapuche@siu SENTENCIA: INSERT INTO apex_usuario_grupo_acc_item (proyecto, usuario_grupo_acc, item_id, item) VALUES ('mapuche', 'liquidacion', NULL, '53000015'); 2019-11-01 10:00:41.417 -03 [2628] mapuche@siu ERROR: inserción o actualización en la tabla «apex_usuario_grupo_acc_item» viola la llave foránea «apex_usu_item_fk_item» 2019-11-01 10:00:41.417 -03 [2628] mapuche@siu DETALLE: La llave (proyecto, item)=(mapuche, 53000015) no está presente en la tabla «apex_item». 2019-11-01 10:00:41.417 -03 [2628] mapuche@siu SENTENCIA: INSERT INTO apex_usuario_grupo_acc_item (proyecto, usuario_grupo_acc, item_id, item) VALUES ('mapuche', 'liquidacion_1', NULL, '53000015');

Log instalador.log

[2019-11-01 11:17:34] MAIN.INFO: [ TOBA ] ATENCION! No fue posible cargar por completo el 'perfil_liquidacion', posiblemente a causa de que al menos una operación, restricción o derecho ha dejado de existir en 'mapuche'. A continuación el detalle: ERROR ejecutando SQL: [CODIGO]: 7 [SQLSTATE]: db_23503 [MENSAJE]: ERROR: inserción o actualización en la tabla «apex_usuario_grupo_acc_item» viola la llave foránea «apex_usu_item_fk_item» DETAIL: La llave (proyecto, item)=(mapuche, 53000015) no está presente en la tabla «apex_item». [SQL EJECUTADA]: INSERT INTO apex_usuario_grupo_acc_item (proyecto, usuario_grupo_acc, item_id, item) VALUES ('mapuche', 'liquidacion', NULL, '53000015'); De todas formas se continúa la carga, se recomienda revisar la definición de este perfil. [2019-11-01 11:17:34] MAIN.INFO: [ TOBA ] [2019-11-01 11:17:34] MAIN.INFO: [ TOBA ] ATENCION! No fue posible cargar por completo el 'perfil_liquidacion_1', posiblemente a causa de que al menos una operación, restricción o derecho ha dejado de existir en 'mapuche'. A continuación el detalle: [2019-11-01 11:17:34] MAIN.INFO: [ TOBA ] . [2019-11-01 11:17:34] MAIN.INFO: [ TOBA ] ERROR ejecutando SQL: [CODIGO]: 7 [SQLSTATE]: db_23503 [MENSAJE]: ERROR: inserción o actualización en la tabla «apex_usuario_grupo_acc_item» viola la llave foránea «apex_usu_item_fk_item» DETAIL: La llave (proyecto, item)=(mapuche, 53000015) no está presente en la tabla «apex_item». [SQL EJECUTADA]: INSERT INTO apex_usuario_grupo_acc_item (proyecto, usuario_grupo_acc, item_id, item) VALUES ('mapuche', 'liquidacion_1', NULL, '53000015'); De todas formas se continúa la carga, se recomienda revisar la definición de este perfil. [2019-11-01 11:17:35] MAIN.INFO: [ TOBA ] .OK

Estos perfiles se migraron y quedaron funcionando para las personas que tenian asociados los 2 perfiles pero quiero saber que es lo que esta funcionando mal y como arreglarlo.

  1. Cuando termino el cambio de versión y quiero ingresar a Administración → Usuarios (luego de insertar en la tabla toba_mapuche.apex_usuario_proyecto los datos necesarios para que me dé acceso ya que antes del cambio de versión tuve que sacarle el permiso de acceder a este módulo a TODOS) me abre una ventana en blanco, vacía.

Según el log de apache2 el error está en que no encuentra el archivo ubicado en /usr/local/mapuche_370/vendor/siu-toba/framework/proyectos/toba_usuarios/metadatos_compilados/gene/toba_mc_gene__grupo_logs.php y buscandoló efectivamente no está. Copio el de la versión 3.6.1 y logro acceder.

Esto me estará rompiendo algo? Que importancia tiene este archivo?

  1. El mas importante! Al finalizar el cambio de versión el sistema anda un poco mas lento de lo normal pero lo empiezan a utilizar normalmente para carga de datos.

Hoy sigo revisando y detecté que en el esquema toba_mapuche_logs no migró las primary key y foreign keys de algunas tablas. Entre ellas las de apex_solicitud, apex_solicitud_browser, apex_solicitud_consola, etc.
De ahí surge la lentitud del sistema.
Mi consulta es si puedo correr estas restricciones para que se creen los indices adecuadamente o se va a romper todo?
Ví en el foro que alguien hizo un script para borrar datos de estas tablas que en mi caso llegan a 7 millones de registros. Se pueden borrar estos datos? se guardan sólo los accesos a las operaciones de los usuarios en estas tablas de éste esquema? Se puede hacer un truncate de todas las tablas de este esquema y volver a crear las pk y fk?

Hola Marcos, vamos a intentar responderte todos los puntos.

  1. Antes de migrar, entra a la version 3.6 y elimina los perfiles que tenga el proyecto toba_usuarios. Creemos que es un problema de que el actualizador solo migra cosas referentes a mapuche. La verdad que no es algo común usar perfiles sobre el proyecto toba_usuarios. Es algo que tenemos que solucionar para que se puedan migrar correctamente. Eliminando el perfil (del proyecto toba_usuarios) se te va a solucionar este punto.

  2. Este punto es un error nuestro, sacamos un item y no lo borramos de los perfiles que lo estén utilizando. Para solucionarlo, podes ejecutar:
    DELETE FROM
    toba_mapuche.apex_usuario_grupo_acc_item
    WHERE
    proyecto = ‘mapuche’
    and usuario_grupo_acc in (‘liquidacion’,‘liquidacion_1’)
    and item = ‘53000015’;

  3. Con el usuario administrador, no tendrías que tener problema en ingresar. Luego, una vez dentro, dale permisos a tu usuario.

  4. Luego de la actualización es recomendable realizar un VACUUM ANALYZE sobre la base. De todas formas, tendrías que tener las PK y FK en las tablas que mencionas. Si se eliminaron, puede ser por algún problema anterior durante la actualización.

Saludos, Nico.
4

Hola Nico. Gracias por responder!

Los puntos 1, 2 y 3 quedan claros.
Ayer me puse a mirar logs y al parecer el problema surgió al levantar la base antes del cambio de versión o algo parecido.
Encontré que hay al menos 10 registros que no cumplen con la restricción de la pk en toba_mapuche_logs.apex_solicitud con fecha de hace 2 meses. No sé porque sucedió esto pero al levantar backups luego de esa fecha no crea los pk y fk de esa tabla, de apex_solicitud_browser y de alguna otra.

Ahora estoy pensando en hacer un truncate de las tablas de este esquema si es que sólo sirven para ver los logs de sesiones y accesos (previo backup del esquema obviamente) para luego volver a crear las pk y fk de las tablas involucradas. Habrá algo mas que deba tener en cuenta antes de hacer los truncates?

Te recomiendo que tengas un backup antes de truncar los datos. Mas que nada por si tenes algún requerimiento de auditoria, poder hacer un rastreo.
Saludos, Nico

Hice el backup y trunqué los datos de todo el esquema. Volví a crear las pk y fk. Ahora anda de 10 y el backup pasó de 2GB a 1.8GB.

Vuelvo al punto 3. El archivo toba_mc_gene__grupo_logs.php que contiene metadatos y no se copia/genera en la actualización (viene pasando hace bastante en cada cambio de versión). Yo lo copio de instalaciones anteriores y sigue funcionando normalmente pero hay otra forma de que se genere este archivo?

Y sobre el punto 1 es muy raro pero en Uncoma nos piden acceso a los logs del sistema para ver quien modificó algún dato. A nosotros nos parece raro que a nadie le pidan ese tipo de acceso je.

Saludos!

Ya canalizamos el pedido para que el instalador / actualizador tenga en cuenta los perfiles del proyecto toba_usuarios. Por lo que en futuras versiones este inconveniente tendría que quedar solucionado.
Saludos, Nico.

Hola!
En la versión 3.9.0 ó 3.9.1 está resuelto este tema? Tuvimos el mismo inconveniente en su momento con la versión 3.6.1 .
Saludos.

Grace Piccininno

Hola Graciela, te cuento que la funcionalidad que pedís no esta incluida todavía en el instalador / actualizador. Por lo que SIU-Mapuche tampoco la tiene disponible.
Saludos, Nico