Skip to content

Commit 6f55287

Browse files
committed
Add failure retry in queue job test job
1 parent 43836d7 commit 6f55287

2 files changed

Lines changed: 29 additions & 3 deletions

File tree

queue_job/controllers/main.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ def create_test_job(
247247
failure_rate=0,
248248
job_duration=0,
249249
commit_within_job=False,
250+
failure_retry_seconds=0,
250251
):
251252
if not http.request.env.user.has_group("base.group_erp_manager"):
252253
raise Forbidden(_("Access Denied"))
@@ -284,6 +285,12 @@ def create_test_job(
284285
except ValueError:
285286
max_retries = None
286287

288+
if failure_retry_seconds is not None:
289+
try:
290+
failure_retry_seconds = int(failure_retry_seconds)
291+
except ValueError:
292+
failure_retry_seconds = 0
293+
287294
if size == 1:
288295
return self._create_single_test_job(
289296
priority=priority,
@@ -293,6 +300,7 @@ def create_test_job(
293300
failure_rate=failure_rate,
294301
job_duration=job_duration,
295302
commit_within_job=commit_within_job,
303+
failure_retry_seconds=failure_retry_seconds,
296304
)
297305

298306
if size > 1:
@@ -305,6 +313,7 @@ def create_test_job(
305313
failure_rate=failure_rate,
306314
job_duration=job_duration,
307315
commit_within_job=commit_within_job,
316+
failure_retry_seconds=failure_retry_seconds,
308317
)
309318
return ""
310319

@@ -318,6 +327,7 @@ def _create_single_test_job(
318327
failure_rate=0,
319328
job_duration=0,
320329
commit_within_job=False,
330+
failure_retry_seconds=0,
321331
):
322332
delayed = (
323333
http.request.env["queue.job"]
@@ -331,6 +341,7 @@ def _create_single_test_job(
331341
failure_rate=failure_rate,
332342
job_duration=job_duration,
333343
commit_within_job=commit_within_job,
344+
failure_retry_seconds=failure_retry_seconds,
334345
)
335346
)
336347
return f"job uuid: {delayed.db_record().uuid}"
@@ -347,6 +358,7 @@ def _create_graph_test_jobs(
347358
failure_rate=0,
348359
job_duration=0,
349360
commit_within_job=False,
361+
failure_retry_seconds=0,
350362
):
351363
model = http.request.env["queue.job"]
352364
current_count = 0
@@ -373,6 +385,7 @@ def _create_graph_test_jobs(
373385
failure_rate=failure_rate,
374386
job_duration=job_duration,
375387
commit_within_job=commit_within_job,
388+
failure_retry_seconds=failure_retry_seconds,
376389
)
377390
)
378391

queue_job/models/queue_job.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from odoo.addons.base_sparse_field.models.fields import Serialized
1313

1414
from ..delay import Graph
15-
from ..exception import JobError
15+
from ..exception import JobError, RetryableJobError
1616
from ..fields import JobSerialized
1717
from ..job import (
1818
CANCELLED,
@@ -471,10 +471,23 @@ def related_action_open_record(self):
471471
)
472472
return action
473473

474-
def _test_job(self, failure_rate=0, job_duration=0, commit_within_job=False):
474+
def _test_job(
475+
self,
476+
failure_rate=0,
477+
job_duration=0,
478+
commit_within_job=False,
479+
failure_retry_seconds=0,
480+
):
475481
_logger.info("Running test job.")
476482
if random.random() <= failure_rate:
477-
raise JobError("Job failed")
483+
if failure_retry_seconds:
484+
raise RetryableJobError(
485+
f"Retryable job failed, will be retried in "
486+
f"{failure_retry_seconds} seconds",
487+
seconds=failure_retry_seconds,
488+
)
489+
else:
490+
raise JobError("Job failed")
478491
if job_duration:
479492
time.sleep(job_duration)
480493
if commit_within_job:

0 commit comments

Comments
 (0)