scieloorg / PC-Programs

SciELO PC Programs
7 stars 24 forks source link

Aumenta a relisiência durante a escrita de PIDs na base de dados SQLite #3300

Closed joffilyfe closed 4 years ago

joffilyfe commented 4 years ago

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 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.

Como este poderia ser testado manualmente?

Pode-se testar este PR da seguinte forma:

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