-
Notifications
You must be signed in to change notification settings - Fork 398
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tratar erro de desconexão com banco de dados no descongelamento das lambdas #1570
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Eu não sei se entendi muito bem, mas uma lambda só congela a execução depois de um |
Isso mesmo! E o problema deve ser por códigos que podem ficar para serem executados após o tabnews.com.br/infra/database.js Lines 42 to 52 in 9e4ae2e
Por ser um erro esporádico, e por serem abertas muito menos lambdas em homologação do que no ambiente de produção, já está rodando em produção. 😅 |
Puuutts sensacionaaaaal 😍 |
Minha especulação é que esse "imediato" está mais "imediato" com a atualização, e por isso o erro só agora. Isso porque acredito que esse erro já poderia estar ocorrendo esporadicamente, mas tivemos sorte. 🍀 Logo saberemos se é isso, pois só foram tratados os erros |
Vou continuar investigando, pois já disparou um erro. 😒 E não havia disparado nenhuma vez entre o rollback da Sobre as mudanças desse PR, acredito que são válidas. Talvez futuramente encontremos outros erros (se não todos) que possam ser ignorados em: tabnews.com.br/infra/database.js Line 95 in d8c6f8a
|
As lambdas podem ser congeladas logo após responderem a requisição, mesmo se ainda existir código a ser executado depois do envio da resposta.
Isso não vinha sendo um problema, mas com a atualização do runtime para a
v20
no PR #1565, começamos a receber errosECONNRESET
.Especulo que otimizações do Node estão permitindo congelar a lambda mais rapidamente, enquanto ainda não foi executada a
getConnectionLimits()
ou agetOpenedConnections()
.Se as lambdas são descongeladas no meio da execução de uma dessas funções (especificamente no meio da query), onde o banco de dados já vai ter fechado a conexão por timeout, é muito provável que seja o momento em que os erros
ECONNRESET
estão sendo produzidos.Aproveitei para otimizar o processo de liberação da conexão, onde agora o pool não é mais destruído, mas apenas a conexão com o banco de dados é liberada através do argumento
true
passado paraclient.release()
quando for estivermos com muitas conexões abertas (tooManyConnections
).