[damned-lies] Prevent an IntegrityError crash in get_or_create call with MySQL
- From: Claude Paroz <claudep src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [damned-lies] Prevent an IntegrityError crash in get_or_create call with MySQL
- Date: Wed, 2 Sep 2015 15:23:10 +0000 (UTC)
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]