Sí, has leído bien, las mayúsculas están a posta. Vamos a echarle un vistazo a lo que a día de hoy, ha sido el “bug” más raro de mi vida y uno de los más difíciles de identificar.
Un equipo en el que estuve hace tiempo, trabajaba sobre legalización de facturas. En este ámbito, es muy importante el momento en el que se emite, firma y envía una factura. Tenía su stack basado en C# ejecutándose sobre máquinas Windows Server.
Nuestra plataforma recibía facturas de distintos emisores a nivel internacional. Te podrás imaginar que manejábamos distintas zonas horarias, ya ves por donde va el problema ¿no?. Nosotros las procesábamos y las mandábamos a sus correspondientes entidades, para que dieran el ok de que dichas facturas cumplían con la normativa que les correspondía. En ese proceso, transformábamos a según que zona horaria correspondiese y resultaba que, para unas máquinas esta operación estaba haciéndose correctamente pero para otras no.
Tras ver que esto estaba pasando, decidimos hacer un test en el que probásemos que dicha conversión de horas, se estuviera ejecutando de manera correcta. Para nuestra sorpresa, en nuestras máquinas de desarrollo funcionaba perfectamente, por lo que en local no conseguíamos replicar el problema.
El siguiente paso era probar en las máquinas de Jenkins, a ver si en la integración continua conseguíamos aclarar que estaba pasando. Resultó ser que aquí vimos el test fallando, por lo que, ¡habemus escenario de prueba sobre el que experimentar para tratar de solucionarlo!
En primera instancia, decidimos ver si había cambiado algo en el histórico desde que supimos que el problema existía. Para nuestra sorpresa, ese código no había cambiado.
Comenzamos a ponernos nerviosos al ver que pasaban los días, el bug continuaba y nosotros seguíamos sin tener ni un atisbo de saber que estaba pasando.
Decidimos recurrir a ver el estado de las máquinas. Habían actualizaciones de Windows hechas en unas máquinas y no en las otras. Resultó ser que, si bien había actualizaciones pendientes, no resolvían el problema.
Seguían pasando los días y literalmente no teníamos nada. No sabíamos qué hacer, ni a quién recurrir hasta que… ¡Idea feliz! ¿Y si nos metemos dentro del código para ver de dónde saca la cantidad de horas que tiene que sumar/restar para hacer el cálculo?
Gracias a un vistazo exhaustivo del código del framework, vimos que, la cantidad de horas para hacer la operación la sacaba de un registro de Windows, por lo cual, nos pusimos a comparar los valores de dicho registro entre las máquinas que sí funcionaban con las que no. Efectivamente, el registro tenía mal el valor, por lo que la operación no se estaba haciendo bien.
Gracias a esa “curiosidad” de echarle un ojo al código, salvamos un bug que aparentemente no se podía solucionar. Todavía, a día de hoy no sabemos por qué el registro de Windows no estaba con el valor correcto. La conclusión más factible es que había alguna actualización que debía actualizarlo (valga la redundancia), pero no lo hizo.
Con el aprendizaje que me quedo de esta experiencia paranormal es que, hasta la cosa más tonta del mundo como una suma/resta de una hora, puede ser todo un reto en una situación extrema o rara.
Espero que este artículo les sirva para tenerlo en la cabeza en el futuro. Yo desde luego, la próxima vez que tenga un problema de conversión de horas y esté en plataforma Windows, pienso ir directo al registro a comprobarlo.
¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.
Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?
Pero espera 🖐 que tenemos un conflicto interno. A nosotros las newsletter nos parecen 💩👎👹 Por eso hemos creado la LEAN LISTA, la primera lista zen, disfrutona y que suena a rock y reggaeton del sector de la programación. Todos hemos recibido newsletters por encima de nuestras posibilidades 😅 por eso este es el compromiso de la Lean Lista