Crónica de una migración con instalación complicada II - Error 440 - Sesion ha caducado.

.. Continuación de Crónica de una migración con instalación complicada.

Una vez terminada la conversión de la KB, hicimos un deploy en el ambiente de pruebas y lo probamos durante mas de un mes, y corregimos algunos detalles menores.  Es una instalación bastante compleja, pues necesita instalarse en varios servidores con balanceo de carga, servidores para procesos batch, etc.

Teníamos las version Evolution 3 instalada y una versión GeneXus 16 Upgrade 3 funcionalmente compatible, a menos de algunas dll de UC que tuvimos que actualizar para evitar algunos errores de ejecución.

Este esquema, nos permitió hacer comparaciones de funcionamiento de ambas versiones. Además del testeo manual hicimos test automatizados con GXTest.
Ejecutar los test automáticos de GXTest 3.0 con la KB en GeneXus 16, dio mas trabajo del deseado.  Tuvimos algunas idas y vueltas con la gente de Abstracta, que logró solucionar los inconvenientes técnicos y corrieron todas las pruebas automatizadas sobre la nueva versión sin problemas.

Primera Puesta en producción. 

Batch
Pusimos en producción las tareas batch, sin problemas. Tenemos un mecanismos que podemos copiar al ambiente de producción y luego ir haciendo el switch de versiones en forma paulatina, de forma de poder controlar los errores y todo funcionó sin grandes sorpresas. Solo fallaron los programas que hacen uso del PGE (Portal de Gobierno Electrónico) pues es muy susceptible a cualquier cambio.

Web
Luego pusimos en producción un nodo de la aplicación en el NLB (Balanceador de carga).  La idea era hacer convivir un nodo de la aplicación nueva con los nodos de la aplicación anterior.  Como está configurado, luego que atiende un servidor, sigue atendiendo ese servidor hasta que el usuario se desconecta, por lo que no estaba previsto tener problemas.

En seguida empezaron a aparecer cantidad (cientos) de errores http 440 - La sesión ha caducado y se recargará.

Esperábamos algunos de estos errores, pero no tantos.

Tenemos la propiedad

On session timeout = Ignore

por lo que suponíamos en forma errónea, que no iba aparecer mensajes al usuario.  Sin embargo aparecía y además saltaba muchas veces dificultando el trabajo de la gente.

Esta es una de las peores situaciones para un programador GeneXus, acostumbrado a trabajar a un nivel de abstracción alto, y aparece un error de bajo nivel, por una validación realizada en una biblioteca que no dominamos, pues el error es dado por la GeneXus Standard Classes.

Para entender que está pasando, hay que entender que es lo que hacen esas validaciones y la única forma que conozco es leer el código.

Para empeorar la situación, cuando fui a buscar los fuentes de la GX16 U3, no estaban publicados, pues están en proceso de migrarlos a GitHub.  Por suerte lo solucionaron muy rapido y quedaron publicados.

Nuestra KB no tenía la propiedad de Web User Experience = Smooth por lo que el comportamiento era un poco diferente a una nativa con Genexus 16.

Después de una media hora, hicimos un rollback de la instalación a la version anterior y nos pusimos a repasar en que nos habíamos equivocado y revisar los logs para ver si encontrábamos algo importante.

Lo primero fue identificar que si un usuario estaba trabajando en un nodo con la version vieja y le bajábamos ese nodo, era posible que lo atendiera un nodo con la version nueva y eso daba un error 440 (lo cual es correcto, no por timeout, sino porque no podía desencriptar los parámetros de las llamadas ajax).
La no cambiamos la clave de encriptación de parámetros de la versión Evo3 a la GX16, pero la validación realizada por GX igual daba diferente.

Que aprendimos: 
* No conviene mezclar nodos con dos versiones diferentes
* No es compatible de encriptación de parámetros que hace Evo3 con GX16.
* Al darse el error 440 aparece un mensaje de error al usuario, aunque la propiedad On session timeout = Ignore.
* No sabemos cómo  distinguir entre un 440 por Timeout y un 440 por Invalid Session.


Continua en Crónica de una migración con instalación complicada III.

Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.