Discourse utilizza DistributedMutex, un’implementazione di blocco Redis per varie funzionalità. Sembra che l’implementazione di questo blocco Redis preveda timeout, trasformandolo in una “lease” invece che in un “lock”.
Potrebbero verificarsi problemi come condizioni di gara quando il timeout del blocco Redis si verifica prima che il lavoro protetto da tale blocco sia completato.
È vero, ma cerchiamo di progettare le cose in modo che richiedano significativamente meno tempo rispetto al timeout del lock.
Se non avessimo alcun tipo di timeout, potremmo finire in una situazione in cui il mutex rimane bloccato per sempre. (ad esempio, se un processo dell’applicazione perde la connessione a Redis mentre detiene il lock)