Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como evitar a condição de corrida com verificações exclusivas no Django


A maneira padrão é NÃO lidar com isso, pois:
  1. a probabilidade de falha no seu caso é próxima de 0;
  2. a gravidade da falha é muito baixa.

Se, por algum motivo, você precisa ter certeza de que o problema não vai acontecer, você está sozinho.

Não analisei a sequência de eventos em detalhes, mas acho que usar o nível de isolamento SERIALIZABLE não ajudará muito, apenas causará IntegrityError (ou DatabaseError ) para ser levantada em um lugar diferente.

Substituindo Model._perform_unique_checks me parece uma má ideia, é melhor você ficar longe de patches de macaco, se possível (e aqui está possível).

Quanto ao uso do bloqueio de tabela para evitar erros improváveis... Bem, eu não sou um grande fã, então também não posso recomendar isso.

Aqui está uma boa resposta para uma pergunta semelhante:https://stackoverflow.com/a/3523439/176186 - Concordo que a captura de IntegrityError e tentar novamente é provavelmente a maneira mais sensata de lidar com o problema.

EDIT:Encontrei isto:Symfony2 - como recuperar de um erro de restrição exclusiva após o envio do formulário? e concordo com a resposta do @pid.