[damned-lies] Prevent an IntegrityError crash in get_or_create call with MySQL



commit a08d6d1871401ccb6b3b15e6cc51f9066a003216
Author: Claude Paroz <claude 2xlibre net>
Date:   Wed Sep 2 17:21:48 2015 +0200

    Prevent an IntegrityError crash in get_or_create call with MySQL

 vertimus/views.py |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
---
diff --git a/vertimus/views.py b/vertimus/views.py
index 690b3ae..a2c309c 100644
--- a/vertimus/views.py
+++ b/vertimus/views.py
@@ -25,6 +25,7 @@ import os
 from django.conf import settings
 from django.contrib import messages
 from django.core import urlresolvers
+from django.db import IntegrityError
 from django.http import HttpResponseRedirect, Http404
 from django.shortcuts import render, get_object_or_404
 from django.utils.translation import ugettext as _
@@ -72,10 +73,15 @@ def vertimus(request, branch, domain, language, stats=None, level="0"):
             stats = FakeLangStatistics(pot_stats, language)
 
     # Get the state of the translation
-    (state, created) = State.objects.get_or_create(
-        branch=branch,
-        domain=domain,
-        language=language)
+    try:
+        state, created = State.objects.get_or_create(
+            branch=branch,
+            domain=domain,
+            language=language)
+    except IntegrityError:
+        # MySQL is subject to a race condition with default REPEATABLE READ isolation level
+        # See https://code.djangoproject.com/ticket/13906
+        state = State.objects.get(branch=branch, domain=domain, language=language)
     other_branch_states = State.objects.filter(
         domain=domain, language=language).exclude(branch=branch.pk).exclude(name='None')
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]