diff --git a/arkindex/ponos/models.py b/arkindex/ponos/models.py index f64685581b11b613dbf59a6cb2919861dbd4b19a..c139b7d9ce9507c38ca923cdfa7bec131e749750 100644 --- a/arkindex/ponos/models.py +++ b/arkindex/ponos/models.py @@ -172,6 +172,12 @@ class State(Enum): State where a task that entered the Stopping state has successfully stopped. """ + Cancelled = "cancelled" + """ + State where a task has been stopped because it has exceeded a resource limit (time, CPU, etc.). + This limit may have been enforced by Arkindex or by a third party. + """ + # States where a task is considered final. # Once a task reaches a final state, its state should no longer change. @@ -180,6 +186,7 @@ FINAL_STATES = ( State.Failed, State.Error, State.Stopped, + State.Cancelled, ) # States where a task could start, be running, or still be using some resources, on an agent @@ -197,6 +204,7 @@ ACTIVE_STATES = ( # the process is set as running to prevent retrying and allow stopping. STATES_ORDERING = [ State.Running, + State.Cancelled, State.Failed, State.Error, State.Stopping, diff --git a/arkindex/ponos/serializers.py b/arkindex/ponos/serializers.py index 59085cd3d5de420f3c0d61dfd302a740f26507a8..ce6bd6f6cb160be1312a851357aa8bc0de0a231f 100644 --- a/arkindex/ponos/serializers.py +++ b/arkindex/ponos/serializers.py @@ -36,7 +36,8 @@ class TaskLightSerializer(serializers.ModelSerializer): Pending ⟶ Running ⟶ Completed └⟶ Error ├⟶ Failed - └⟶ Error + ├⟶ Error + └⟶ Cancelled Stopping ⟶ Stopped └⟶ Error @@ -81,7 +82,12 @@ class TaskLightSerializer(serializers.ModelSerializer): allowed_transitions = { State.Unscheduled: [State.Pending], State.Pending: [State.Running, State.Error], - State.Running: [State.Completed, State.Failed, State.Error], + State.Running: [ + State.Completed, + State.Failed, + State.Error, + State.Cancelled, + ], State.Stopping: [State.Stopped, State.Error], } if user.mode == AgentMode.Slurm: diff --git a/arkindex/ponos/tests/tasks/test_partial_update.py b/arkindex/ponos/tests/tasks/test_partial_update.py index 0306ea5ad6fcafbb8b335190a3792ef4ff3ef576..e43cc217ae4d2690c4862846aa66ae0ed79842ed 100644 --- a/arkindex/ponos/tests/tasks/test_partial_update.py +++ b/arkindex/ponos/tests/tasks/test_partial_update.py @@ -49,6 +49,7 @@ class TestTaskPartialUpdate(FixtureAPITestCase): (State.Running, State.Completed), (State.Running, State.Failed), (State.Running, State.Error), + (State.Running, State.Cancelled), (State.Stopping, State.Stopped), (State.Stopping, State.Error), ) diff --git a/arkindex/ponos/tests/tasks/test_update.py b/arkindex/ponos/tests/tasks/test_update.py index eee58e157df9643893dc9877f3773a6a8cfa39a7..97029d9324ec065e5005327b9975a48cf7aabc22 100644 --- a/arkindex/ponos/tests/tasks/test_update.py +++ b/arkindex/ponos/tests/tasks/test_update.py @@ -59,6 +59,7 @@ class TestTaskUpdate(FixtureAPITestCase): (State.Running, State.Completed), (State.Running, State.Failed), (State.Running, State.Error), + (State.Running, State.Cancelled), (State.Stopping, State.Stopped), (State.Stopping, State.Error), )