lareferencia/dspace-stats-collector

Nunca se cierra la conexión de la base de datos

santit96 opened this issue · 3 comments

Si bien se abre una conexión a la base de datos a través de sqlalchemist en esta línea de la clase DSpaceDB, esta conexión no se cierra nunca en el programa.

Se debería ejecutar un connection.close() en el momento que ya no se realicen consultas a la bd.

La documentación de pandas dice que el método read_sql, que se usa para realizar las queries a la bd, delega en el usuario el cerrado de la conexión. Y además la documentación de sqlalchemist sugiere no dejar conexiones abiertas cuando se termina el programa, porque, si bien el garbage collector de python en algún momento "barrerá" el pool de conexiones cerrando así cualquier conexión abierta, no es aconsejable confiar en que lo haga y lo mejor es cerrarlas explícitamente.

@santit96 Gracias por el review, te cuento que hemos hecho un fix rápido de esto y ya está desplegado.
El problema es que hay una única conexión que se abre cuando el colector empieza a funcionar, entonces tuve que hacer una limpieza de recursos antes de terminar de ejecutar. Probablemente hay que cambiar esto para que no deje abierta tanto tiempo una misma conexión ( el collector corre algunos minutos y se cierra, no es un daemon ).
Este código fue hecho en colaboración y pasó por varias manos, entonces hay varias cosas que vamos descubriendo y que incluso debemos rediseñar.
Muchas gracias por tu ayuda y sos bienvenido a colaborar o marcarnos mejoras cuando desees. Un saludo

Buenísimo! Que rápido lo resolvieron!
Joya, de todas maneras por lo que estuve leyendo de sqlalchemist, cuando se cierra una conexión, por detrás lo que hace es dejar abierta "por las dudas" la conexión real con la base de datos en caso de que se quiera abrir otra, por una cuestión de performance. Luego, si al finalizar el engine no se abrió ninguna otra, recién ahí la cierra. Por lo que quizás sea bueno tener una única conexión abierta durante todo el programa dado que en términos de base de datos termina siendo lo mismo.

Muchas gracias por la invitación a colaborar y la respuesta rápida. Saludos