Skip to content

Commit 72f48d2

Browse files
committed
Return None if run_in_worker doesn't create a new JobRequest, fix typing issues and intentional delay 0 on job retry
1 parent 7289827 commit 72f48d2

2 files changed

Lines changed: 13 additions & 13 deletions

File tree

plain-jobs/plain/jobs/jobs.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def run_in_worker(
6262
retries: int | None = None,
6363
retry_attempt: int = 0,
6464
unique_key: str | None = None,
65-
) -> JobRequest | list[JobRequest | JobProcess]:
65+
) -> JobRequest | None:
6666
from .models import JobRequest
6767

6868
job_class_name = jobs_registry.get_job_class_name(self.__class__)
@@ -170,8 +170,7 @@ def run_in_worker(
170170
span.set_attribute(ERROR_TYPE, "IntegrityError")
171171
span.set_status(trace.Status(trace.StatusCode.ERROR, "Duplicate job"))
172172
logger.warning("Job already in progress: %s", e)
173-
# Try to return the _in_progress list again
174-
return self._in_progress(unique_key)
173+
return None
175174

176175
def _in_progress(self, unique_key: str) -> list[JobRequest | JobProcess]:
177176
"""Get all JobRequests and JobProcess that are currently in progress, regardless of queue."""

plain-jobs/plain/jobs/models.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -412,10 +412,14 @@ class JobResult(models.Model):
412412
],
413413
)
414414

415-
def retry_job(self, delay: int | None = None) -> JobRequest:
415+
def retry_job(self, delay: int | None = None) -> JobRequest | None:
416416
retry_attempt = self.retry_attempt + 1
417417
job = jobs_registry.load_job(self.job_class, self.parameters)
418-
retry_delay = delay or job.get_retry_delay(retry_attempt)
418+
419+
if delay is None:
420+
retry_delay = job.get_retry_delay(retry_attempt)
421+
else:
422+
retry_delay = delay
419423

420424
with transaction.atomic():
421425
result = job.run_in_worker(
@@ -427,12 +431,9 @@ def retry_job(self, delay: int | None = None) -> JobRequest:
427431
retry_attempt=retry_attempt,
428432
# Unique key could be passed also?
429433
)
434+
if result:
435+
self.retry_job_request_uuid = result.uuid
436+
self.save(update_fields=["retry_job_request_uuid"])
437+
return result
430438

431-
# TODO it is actually possible that result is a list
432-
# of pending jobs, which would need to be handled...
433-
# Right now it will throw an exception which could be caught by retry_failed_jobs.
434-
435-
self.retry_job_request_uuid = result.uuid # type: ignore
436-
self.save(update_fields=["retry_job_request_uuid"])
437-
438-
return result # type: ignore
439+
return None

0 commit comments

Comments
 (0)