Skip to content
Snippets Groups Projects

Remove old task retry mechanism

Merged Valentin Rigal requested to merge drop-old-restart into master
All threads resolved!
Files
2
@@ -9,7 +9,7 @@ from django.urls import reverse
from rest_framework import status
from arkindex.documents.models import Corpus
from arkindex.ponos.models import FINAL_STATES, State, Task
from arkindex.ponos.models import State, Task
from arkindex.process.models import Process, ProcessMode, Revision, WorkerVersion
from arkindex.project.tests import FixtureAPITestCase
from arkindex.users.models import Right, Role, User
@@ -287,6 +287,7 @@ class TestAPI(FixtureAPITestCase):
def test_update_non_running_task_state_stopping(self):
states = list(State)
states.remove(State.Running)
states.remove(State.Stopping)
self.client.force_login(self.superuser)
for state in states:
@@ -302,51 +303,46 @@ class TestAPI(FixtureAPITestCase):
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
self.assertDictEqual(
resp.json(),
{"state": [f"Transition from state {state} to state Stopping is forbidden."]},
{"state": ["State can only be updated from running to stopping"]},
)
self.task1.refresh_from_db()
self.assertEqual(self.task1.state, state)
def test_update_final_task_state_pending(self):
self.task1.state = State.Completed
def test_update_running_task_non_pending(self):
states = list(State)
states.remove(State.Running)
states.remove(State.Stopping)
self.task1.state = State.Running
self.task1.save()
self.client.force_login(self.superuser)
with self.assertNumQueries(5):
resp = self.client.put(
reverse("api:task-update", args=[self.task1.id]),
data={"state": State.Pending.value},
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.task1.refresh_from_db()
self.assertEqual(self.task1.state, State.Pending)
self.assertIsNone(self.task1.agent)
self.assertIsNone(self.task1.gpu)
def test_update_non_final_task_state_pending(self):
states = set(State) - set(FINAL_STATES)
self.client.force_login(self.superuser)
for state in states:
with self.subTest(state=state):
self.task1.state = state
self.task1.save()
with self.assertNumQueries(3):
resp = self.client.put(
reverse("api:task-update", args=[self.task1.id]),
data={"state": State.Pending.value},
data={"state": state.value},
)
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
self.assertDictEqual(
resp.json(),
{"state": [f"Transition from state {state} to state Pending is forbidden."]}
{"state": ["State can only be updated from running to stopping"]},
)
self.task1.refresh_from_db()
self.assertEqual(self.task1.state, state)
def test_update_same_state(self):
states = list(State)
self.client.force_login(self.superuser)
for state in states:
with self.subTest(state=state):
self.task1.state = state
self.task1.save()
resp = self.client.put(
reverse("api:task-update", args=[self.task1.id]),
data={"state": state.value},
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
def test_partial_update_task_from_agent_requires_login(self):
with self.assertNumQueries(0):
@@ -424,29 +420,10 @@ class TestAPI(FixtureAPITestCase):
)
self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
def test_partial_update_running_task_state_stopping(self):
self.task1.state = State.Running
self.task1.save()
self.client.force_login(self.superuser)
with self.assertNumQueries(4):
resp = self.client.patch(
reverse("api:task-update", args=[self.task1.id]),
data={"state": State.Stopping.value},
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertDictEqual(resp.json(), {
"id": str(self.task1.id),
"state": State.Stopping.value,
})
self.task1.refresh_from_db()
self.assertEqual(self.task1.state, State.Stopping)
def test_partial_update_non_running_task_state_stopping(self):
states = list(State)
states.remove(State.Running)
self.task1.save()
states.remove(State.Stopping)
self.client.force_login(self.superuser)
for state in states:
@@ -462,51 +439,46 @@ class TestAPI(FixtureAPITestCase):
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
self.assertDictEqual(
resp.json(),
{"state": [f"Transition from state {state} to state Stopping is forbidden."]}
{"state": ["State can only be updated from running to stopping"]},
)
self.task1.refresh_from_db()
self.assertEqual(self.task1.state, state)
def test_partial_update_final_task_state_pending(self):
self.task1.state = State.Completed
def test_partial_update_running_task_non_pending(self):
states = list(State)
states.remove(State.Running)
states.remove(State.Stopping)
self.task1.state = State.Running
self.task1.save()
self.client.force_login(self.superuser)
with self.assertNumQueries(5):
resp = self.client.patch(
reverse("api:task-update", args=[self.task1.id]),
data={"state": State.Pending.value},
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.task1.refresh_from_db()
self.assertEqual(self.task1.state, State.Pending)
self.assertIsNone(self.task1.agent)
def test_partial_update_non_final_task_state_pending(self):
states = set(State) - set(FINAL_STATES)
self.task1.save()
self.client.force_login(self.superuser)
for state in states:
with self.subTest(state=state):
self.task1.state = state
self.task1.save()
with self.assertNumQueries(3):
resp = self.client.patch(
reverse("api:task-update", args=[self.task1.id]),
data={"state": State.Pending.value},
data={"state": state.value},
)
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
self.assertDictEqual(
resp.json(),
{"state": [f"Transition from state {state} to state Pending is forbidden."]}
{"state": ["State can only be updated from running to stopping"]},
)
self.task1.refresh_from_db()
self.assertEqual(self.task1.state, state)
def test_partial_update_same_state(self):
states = list(State)
self.client.force_login(self.superuser)
for state in states:
with self.subTest(state=state):
self.task1.state = state
self.task1.save()
resp = self.client.patch(
reverse("api:task-update", args=[self.task1.id]),
data={"state": state.value},
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
@patch("arkindex.project.aws.s3")
def test_task_logs_unicode_error(self, s3_mock):
Loading