Skip to content

Commit d1a913c

Browse files
authored
Add temporary workaround for SoftTimeLimitExceeded (#4379)
See DIAGNijmegen/rse-grand-challenge-admin#663
1 parent 76cf343 commit d1a913c

2 files changed

Lines changed: 27 additions & 12 deletions

File tree

app/grandchallenge/cases/models.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import boto3
1010
from actstream.actions import follow
11+
from billiard.exceptions import SoftTimeLimitExceeded
1112
from botocore.exceptions import ClientError
1213
from celery import signature
1314
from django.conf import settings
@@ -668,7 +669,9 @@ def sitk_image(self):
668669

669670
return sitk_image
670671

671-
def update_viewer_groups_permissions(self, *, exclude_jobs=None):
672+
def update_viewer_groups_permissions( # noqa: C901
673+
self, *, exclude_jobs=None
674+
):
672675
"""
673676
Update the permissions for the algorithm jobs viewers groups to
674677
view this image.
@@ -685,20 +688,26 @@ def update_viewer_groups_permissions(self, *, exclude_jobs=None):
685688
from grandchallenge.archives.models import Archive
686689
from grandchallenge.reader_studies.models import ReaderStudy
687690

688-
if exclude_jobs is None:
689-
exclude_jobs = set()
690-
else:
691-
exclude_jobs = {j.pk for j in exclude_jobs}
692-
693691
expected_groups = set()
694692

695693
for key in ["inputs__image", "outputs__image"]:
696-
for job in (
697-
Job.objects.exclude(pk__in=exclude_jobs)
698-
.filter(**{key: self})
694+
job_queryset = (
695+
Job.objects.filter(**{key: self})
699696
.prefetch_related("viewer_groups")
700-
):
701-
expected_groups.update(job.viewer_groups.all())
697+
.only("viewer_groups")
698+
)
699+
700+
if exclude_jobs is not None:
701+
job_queryset = job_queryset.exclude(
702+
pk__in={j.pk for j in exclude_jobs}
703+
)
704+
705+
try:
706+
for job in job_queryset:
707+
expected_groups.update(job.viewer_groups.all())
708+
except SoftTimeLimitExceeded as error:
709+
logger.error(error, exc_info=True)
710+
raise
702711

703712
for archive in Archive.objects.filter(
704713
items__values__image=self

app/grandchallenge/evaluation/tasks.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import uuid
22
from datetime import timedelta
33

4+
from billiard.exceptions import SoftTimeLimitExceeded
45
from celery.utils.log import get_task_logger
56
from django.conf import settings
67
from django.core.exceptions import ValidationError
@@ -201,7 +202,12 @@ def prepare_and_execute_evaluation(*, evaluation_pk):
201202

202203

203204
@acks_late_micro_short_task(
204-
retry_on=(TooManyJobsScheduled, LockNotAcquiredException)
205+
retry_on=(
206+
TooManyJobsScheduled,
207+
LockNotAcquiredException,
208+
# TODO remove SoftTimeLimitExceeded, temporary workaround for https://github.com/DIAGNijmegen/rse-grand-challenge-admin/issues/663
209+
SoftTimeLimitExceeded,
210+
)
205211
)
206212
@transaction.atomic
207213
def create_algorithm_jobs_for_evaluation(*, evaluation_pk, first_run):

0 commit comments

Comments
 (0)