Repository navigation
Feat/issue 148 distributed lock cleanup - #149
Merged
Merged
Conversation
… cleanup_service.py
…em cleanup_service.py - adicionada verificacao de lock nao-bloqueante no Redis com chave lock:token_cleanup e timeout de 300s - garantida liberacao segura do lock no bloco finally e fallback quando Redis desativado - adicionados testes unitarios para cenarios de lock adquirido, lock nao adquirido e fallback
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…o serviço de limpeza.
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌 Descrição
Esta PR resolve o problema de contenção de lock (lock contention) e execuções duplicadas de queries no PostgreSQL ao rodar a aplicação em ambientes distribuídos com múltiplas réplicas/pods em paralelo (ex: Kubernetes).
Foi implementado a verificação de Distributed Lock não-bloqueante via Redis no loop de limpeza de tokens expirados (
_run_cleanup_loopemapp/services/cleanup_service.py).Closes #148
🚀 Mudanças Propostas
app/services/cleanup_service.py:redis_client.lock("lock:token_cleanup", timeout=300).acquired = await lock.acquire(blocking=False).cleanup_expired_tokens(session)e garante a liberação segura do lock no blocofinally.DEBUGsem abrir conexões ou executar queries no banco de dados.redis_client is None), executa a limpeza sem lock (fail-open).tests/test_cleanup_service.py:test_token_cleanup_loop_with_redis_lock_acquired: valida execução da limpeza e liberação do lock quando adquirido com sucesso.test_token_cleanup_loop_with_redis_lock_not_acquired: valida o pulo da iteração sem chamadas ao banco de dados quando outra réplica detém o lock.test_start_and_stop_token_cleanup_loop: valida a execução sob o comportamento de fallback sem Redis.📊 Cobertura de Testes e Validação
test_cleanup_service.pyaprovados (100% de sucesso).ruff check100% green sem erros ou warnings.📋 Checklist de Validação
try...finallycom tratamento para exceções de expiração.