Este pull request faz com que o programa XC use a conexão com o banco SQLite de forma racional, mantendo a conexão aberta apenas quando necessário. Também aumenta o tempo de 5s para 60s durante a espera para que uma transação seja concluída.
Onde a revisão poderia começar?
Aconselho que a revisão seja feita por meio do histórico de commits, iniciando em 31c7355.
import time
from prodtools.db.pid_versions import PIDVersionsDB, PIDVersionsManager
with PIDVersionsDB("/tmp/teste.db") as db:
manager = PIDVersionsManager(db)
manager.register("2", "3")
print("Foi realizada uma tentativa de registro do pid v3")
time.sleep(10)
print("A conexão foi desfeita..")
- Observe que a conexão é encerrada a pós 10 segundos;
- Observe que a segunda aba a executar o código inicia o registro do pid logo após
ser notificada de que a transação foi concluída;
#### Algum cenário de contexto que queira dar?
Este PR não soluciona o problema de `LOCK` para escritas na tabela de pids, pelo que pude ver entre comentários e documentação do sqlite3, não há uma forma de solucionar o problema sem abrir mão da segurança da própria base com perigo de corrupção.
Por outro lado, ao fechar a conexão sempre que ela estiver em desuso nós diminuímos a chance de que o problema volte a ocorrer. Eu vejo que a única forma disto ocorrer novamente é que durante a execução do XC o programa leve mais de `60 segundos` para gravar todos os pids no banco e para que o erro aconteça uma outra execução do XC deve iniciar.
### Screenshots
N/A
#### Quais são tickets relevantes?
#3295
### Referências
N/A
O que esse PR faz?
Este pull request faz com que o programa XC use a conexão com o banco SQLite de forma racional, mantendo a conexão aberta apenas quando necessário. Também aumenta o tempo de
5s
para60s
durante a espera para que uma transação seja concluída.Onde a revisão poderia começar?
Aconselho que a revisão seja feita por meio do histórico de commits, iniciando em 31c7355.
Como este poderia ser testado manualmente?
Pode-se testar este PR da seguinte forma:
pip install -r src/scielo/bin/xml/requirements.txt
cd src/scielo/bin/xml/ && python setup.py test
with PIDVersionsDB("/tmp/teste.db") as db: manager = PIDVersionsManager(db) manager.register("2", "3") print("Foi realizada uma tentativa de registro do pid v3") time.sleep(10) print("A conexão foi desfeita..")