viernes, mayo 29, 2009


 

[Work] Encontré el bug!


Levábamos una semana buscándolo y hoy por fin, revisando mentalmente el problema durante la comida, lo hemos podido localizar y eliminarlo.

Era un error que aparecía en un programa de enlace entre nuestra aplicación y una aplicación de terceros que estamos utilizando en el trabajo. Lo curioso es que nuestro programa de enlace no ha cambiado desde hace meses y este error, no había aparecido hasta hace una semana, lo cual hacía pensar que el error no estaba en el programa de enlace. En cambio nuestra aplicación contaba con una nueva versión desde el jueves pasado.

Tambíen teníamos una nueva versión en funcionamiento de la aplicación de terceros, pero cómo el problema aparecía durante el proceso de envío de datos no se nos ocurrió que pudiera tener relación con ella (esta aplicación de terceros tiene la característica de que una vez recibe los datos permite modificar los datos originales que hay en nuestra aplicación desde esta aplicación de terceros, de manera que una vez enviados se manipulan desde ahí, y no desde nuestra propia aplicación, aunque no se llegaba a ese punto por que el error aparecía, de hacerlo, al segundo siguiente de realizar el envío).

Una cosa teníamos clara: el error que únicamente se producía al ejecutar el programa de enlace remotamente desde Girona o Lleida (desde las oficinas remotas que conectan por Terminal Server, vía internet, a nuestra oficina en Barcelona). Yo para hacer pruebas tenía que conectarme remotamente a una máquina física de Girona, para luego conectarme desde ella remotamente a una máquina de Barcelona que está a diez metros de mi mesa.

Al final resulta que había un error de programación en una sentencia de recuperación de índices de una tabla de la base de datos, la sintaxis era válida hasta que se permitió al programa conectarse a la base de datos con el usuario apropiado en lugar de un usuario genérico, pero ese cambio se hizo a mediados de 2008, así que no parecía ser la causa. Resulta que aun fallando la parte de recuperación de índices -como era el caso- las sentencias de modificación seguían funcionando perfectamente a excepción de que los datos originales hubieran cambiado entre la recuperación y la modificación, esto es algo imposible de que suceda por que todo el proceso de envío es muy rápido (dura unos segundos), a menos que se esté ejecutando el programa remotamente (ya que entonces el envío de información varía de cinco segundos a poco más de un minuto). Y ahí estaba parte de la causa, aunque no toda.

No fue hasta la reciente actualización de la aplicación de terceros, cuya nueva versión incorpora una funcionalidad que hasta ahora no estaba prevista: empezar a modificar los datos originales de nuestra aplicación nada más ser enviados, de hecho incluso los empieza a modificarlos antes de terminar de enviarlos!, y ahí es donde dejaba de funcionar nuestro programa (dejaban de funcionar las cosas si los datos cambiaban durante el proceso de envío). Para añadir problemas el programa de terceros realiza las comprobaciones cada tres minutos, es decir: sólo modifica los datos originales mientras estos se envían si da la casualidad de que empiezas el envío a pocos segundos de alguna de sus comprobaciones en los minutos 3, 6, 9 y tardas en terminar el envío más de un minuto (en efecto, lo que tardan en hacer el envío cuando se realiza remotamente).

Al final era un error de programación en nuestra aplicación en una rutina desarrollada por mi hace un año, pero que sólo ha empezado a provocar problemas hace una semana, y que sólo los provocaba a la gente que trabaja remotamente, una de cada tres veces (concretamente en los minutos 2, 5 y 8), y como suele suceder cuando quieres hervir agua: nunca sucedía si estabas mirando.

This page is powered by Blogger. Isn't yours?