Skip to content
Snippets Groups Projects
Commit f76a2f5f authored by Bastien Abadie's avatar Bastien Abadie
Browse files

Merge branch 'create-element-transcriptions-stale-read' into 'master'

Fix a stale read in CreateElementTranscriptions

See merge request !1508
parents 0f028244 46b20112
No related branches found
No related tags found
1 merge request!1508Fix a stale read in CreateElementTranscriptions
......@@ -169,12 +169,12 @@ class ElementTranscriptionsBulk(CreateAPIView):
def get_queryset(self):
if not self.request:
return Element.objects.none()
# Load elements and their zones from the default DB to avoid
# Load elements from the default DB to avoid
# a stale read issue when an element is created by a worker
# and this endpoint is immediately used after to create transcriptions
return Element.objects.filter(
corpus__in=Corpus.objects.writable(self.request.user)
).using('default')
).using('default').select_related('corpus')
def get_serializer_context(self):
context = super().get_serializer_context()
......@@ -221,7 +221,9 @@ class ElementTranscriptionsBulk(CreateAPIView):
.only('id', 'polygon')
}
# Load the paths immediately to avoid iterating over them for each element
paths = list(self.element.paths.values_list('path', flat=True))
# Use the default DB to avoid stale reads that could cause the new child elements
# to not be in the parent element's parents
paths = list(self.element.paths.using('default').values_list('path', flat=True))
if not paths:
# Support top level elements, by adding an empty initial path to trigger loops below
paths = [[]]
......
......@@ -106,7 +106,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase):
self.assertEqual(created_elts.count(), 1)
self.client.force_login(self.internal_user)
with self.assertNumQueries(14):
with self.assertNumQueries(13):
response = self.client.post(
reverse('api:element-transcriptions-bulk', kwargs={'pk': self.page.id}),
format='json',
......@@ -146,7 +146,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase):
}
self.client.force_login(self.internal_user)
with self.assertNumQueries(14):
with self.assertNumQueries(13):
response = self.client.post(
reverse('api:element-transcriptions-bulk', kwargs={'pk': self.page.id}),
format='json',
......@@ -193,7 +193,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase):
}
self.client.force_login(self.internal_user)
with self.assertNumQueries(12):
with self.assertNumQueries(11):
response = self.client.post(
reverse('api:element-transcriptions-bulk', kwargs={'pk': self.page.id}),
format='json',
......@@ -339,7 +339,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase):
}
self.client.force_login(self.internal_user)
with self.assertNumQueries(14):
with self.assertNumQueries(13):
response = self.client.post(
reverse('api:element-transcriptions-bulk', kwargs={'pk': self.page.id}),
format='json',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment