Skip to content

Commit 44fc1fd

Browse files
committed
Ensure timings are reset
1 parent 066cf31 commit 44fc1fd

3 files changed

Lines changed: 50 additions & 31 deletions

File tree

app/grandchallenge/components/admin.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,18 @@ def requeue_jobs(modeladmin, request, queryset):
113113
jobs = []
114114

115115
for job in queryset:
116+
# If adding fields here remember to add them to the bulk_update fields below
116117
job.status = ComponentJob.RETRY
117118
job.attempt += 1
118-
job.utilization.duration = None
119-
job.utilization.save()
119+
job.exec_duration = None
120+
job.invoke_duration = None
120121
job.use_warm_pool = False
121122
job.error_message = ""
122123
job.detailed_error_message = {}
124+
125+
job.utilization.duration = None
126+
job.utilization.save()
127+
123128
jobs.append(job)
124129

125130
on_commit(job.execute)
@@ -129,6 +134,9 @@ def requeue_jobs(modeladmin, request, queryset):
129134
fields=[
130135
"status",
131136
"attempt",
137+
"exec_duration",
138+
"invoke_duration",
139+
"use_warm_pool",
132140
"error_message",
133141
"detailed_error_message",
134142
],

app/tests/algorithms_tests/test_admin.py

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from datetime import timedelta
2+
3+
import pytest
4+
5+
from grandchallenge.algorithms.models import Job
6+
from grandchallenge.components.admin import requeue_jobs
7+
from tests.algorithms_tests.factories import AlgorithmJobFactory
8+
from tests.evaluation_tests.factories import EvaluationFactory
9+
10+
11+
@pytest.mark.parametrize("factory", (AlgorithmJobFactory, EvaluationFactory))
12+
@pytest.mark.django_db
13+
def test_job_reset_after_admin_requeue(factory):
14+
job = factory(
15+
time_limit=60,
16+
status=Job.FAILURE,
17+
exec_duration=timedelta(seconds=1337),
18+
invoke_duration=timedelta(seconds=1874),
19+
use_warm_pool=True,
20+
)
21+
job.utilization.duration = timedelta(minutes=1)
22+
job.utilization.save()
23+
24+
jobs = factory._meta.model.objects.all()
25+
26+
assert len(jobs) == 1
27+
assert job.utilization.duration is not None
28+
assert job.exec_duration == timedelta(seconds=1337)
29+
assert job.invoke_duration == timedelta(seconds=1874)
30+
assert job.use_warm_pool is True
31+
32+
requeue_jobs(None, None, jobs)
33+
34+
job.refresh_from_db()
35+
36+
assert job.status == Job.RETRY
37+
assert job.utilization.duration is None
38+
assert job.exec_duration is None
39+
assert job.invoke_duration is None
40+
assert job.use_warm_pool is False

0 commit comments

Comments
 (0)