Avoiding race conditions in pre_save
parent
37e61071bf
commit
57e1de23dc
|
@ -31,7 +31,7 @@ class OCCResourceMixin(object):
|
||||||
if current_version != param_version:
|
if current_version != param_version:
|
||||||
raise exc.WrongArguments({"version": "The version doesn't match with the current one"})
|
raise exc.WrongArguments({"version": "The version doesn't match with the current one"})
|
||||||
|
|
||||||
obj.version += 1
|
obj.version = models.F('version') + 1
|
||||||
super().pre_save(obj)
|
super().pre_save(obj)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ def test_invalid_concurrent_save_for_wiki_page(client):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
project = f.ProjectFactory.create(owner=user)
|
project = f.ProjectFactory.create(owner=user)
|
||||||
membership = f.MembershipFactory.create(project=project, user=user)
|
membership = f.MembershipFactory.create(project=project, user=user)
|
||||||
wiki_page = f.WikiPageFactory.create(project=project, owner=user)
|
wiki_page = f.WikiPageFactory.create(version=10, project=project, owner=user)
|
||||||
client.login(user)
|
client.login(user)
|
||||||
|
|
||||||
url = reverse("wiki-detail", args=(wiki_page.id,))
|
url = reverse("wiki-detail", args=(wiki_page.id,))
|
||||||
|
@ -77,7 +77,7 @@ def test_valid_concurrent_save_for_wiki_page(client):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
project = f.ProjectFactory.create(owner=user)
|
project = f.ProjectFactory.create(owner=user)
|
||||||
membership = f.MembershipFactory.create(project=project, user=user)
|
membership = f.MembershipFactory.create(project=project, user=user)
|
||||||
wiki_page = f.WikiPageFactory.create(project=project, owner=user)
|
wiki_page = f.WikiPageFactory.create(version=10, project=project, owner=user)
|
||||||
client.login(user)
|
client.login(user)
|
||||||
|
|
||||||
url = reverse("wiki-detail", args=(wiki_page.id,))
|
url = reverse("wiki-detail", args=(wiki_page.id,))
|
||||||
|
@ -91,7 +91,7 @@ def test_invalid_concurrent_save_for_us(client):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
project = f.ProjectFactory.create(owner=user)
|
project = f.ProjectFactory.create(owner=user)
|
||||||
membership = f.MembershipFactory.create(project=project, user=user)
|
membership = f.MembershipFactory.create(project=project, user=user)
|
||||||
userstory = f.UserStoryFactory.create(project=project)
|
userstory = f.UserStoryFactory.create(version=10, project=project)
|
||||||
client.login(user)
|
client.login(user)
|
||||||
|
|
||||||
url = reverse("userstories-detail", args=(userstory.id,))
|
url = reverse("userstories-detail", args=(userstory.id,))
|
||||||
|
@ -103,7 +103,7 @@ def test_valid_concurrent_save_for_us(client):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
project = f.ProjectFactory.create(owner=user)
|
project = f.ProjectFactory.create(owner=user)
|
||||||
membership = f.MembershipFactory.create(project=project, user=user)
|
membership = f.MembershipFactory.create(project=project, user=user)
|
||||||
userstory = f.UserStoryFactory.create(project=project)
|
userstory = f.UserStoryFactory.create(version=10, project=project)
|
||||||
client.login(user)
|
client.login(user)
|
||||||
|
|
||||||
url = reverse("userstories-detail", args=(userstory.id,))
|
url = reverse("userstories-detail", args=(userstory.id,))
|
||||||
|
@ -118,7 +118,7 @@ def test_invalid_concurrent_save_for_task(client):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
project = f.ProjectFactory.create(owner=user)
|
project = f.ProjectFactory.create(owner=user)
|
||||||
membership = f.MembershipFactory.create(project=project, user=user)
|
membership = f.MembershipFactory.create(project=project, user=user)
|
||||||
task = f.TaskFactory.create(project=project)
|
task = f.TaskFactory.create(version=10, project=project)
|
||||||
client.login(user)
|
client.login(user)
|
||||||
|
|
||||||
mock_path = "taiga.projects.tasks.api.TaskViewSet.pre_conditions_on_save"
|
mock_path = "taiga.projects.tasks.api.TaskViewSet.pre_conditions_on_save"
|
||||||
|
@ -132,7 +132,7 @@ def test_valid_concurrent_save_for_task(client):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
project = f.ProjectFactory.create(owner=user)
|
project = f.ProjectFactory.create(owner=user)
|
||||||
membership = f.MembershipFactory.create(project=project, user=user)
|
membership = f.MembershipFactory.create(project=project, user=user)
|
||||||
task = f.TaskFactory.create(project=project)
|
task = f.TaskFactory.create(version=10, project=project)
|
||||||
client.login(user)
|
client.login(user)
|
||||||
|
|
||||||
mock_path = "taiga.projects.tasks.api.TaskViewSet.pre_conditions_on_save"
|
mock_path = "taiga.projects.tasks.api.TaskViewSet.pre_conditions_on_save"
|
||||||
|
|
Loading…
Reference in New Issue