Timeouts do Redis Lock

O Discourse utiliza o DistributedMutex, uma implementação de bloqueio Redis para várias finalidades. Parece que essa implementação de bloqueio Redis possui tempos limite, tornando-a um “arrendamento” (lease) em vez de um “bloqueio” (lock).

Podem ocorrer problemas potenciais, como condições de corrida, quando o tempo limite do bloqueio Redis expira, mas o trabalho protegido por esse bloqueio ainda não foi concluído.

Isso é verdade, mas tentamos projetar as coisas para que levem significativamente menos tempo do que o tempo limite (timeout) do bloqueio.

Se não houvesse nenhum tipo de tempo limite, poderíamos acabar em uma situação em que o mutex ficasse bloqueado para sempre (por exemplo, se um processo de aplicativo perder a conexão com o Redis enquanto estiver segurando o bloqueio).