From 03f2ae2bc4c0f524816d78950e616892976a25b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Casaj=C3=BAs?= Date: Thu, 30 Jun 2022 17:25:15 +0200 Subject: [PATCH] Update timing condition --- job_runner.py | 13 +++++-------- tests/jobs/test_job_runner.py | 20 ++------------------ 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/job_runner.py b/job_runner.py index c48667be..34c89706 100644 --- a/job_runner.py +++ b/job_runner.py @@ -223,25 +223,22 @@ SimpleLogin team. def get_jobs_to_run() -> List[Job]: - # run a job 1h earlier or later is not a big deal ... - min_dt = arrow.now().shift(hours=-1) - max_dt = arrow.now().shift(hours=1) - # Get jobs that match all conditions: # - Job.state == ready OR (Job.state == taken AND Job.taken_at < now - 30 mins AND Job.attempts < 5) - # - Job.run_at is Null OR (Job.run_at > min_dt AND Job.run_at < max_dt) + # - Job.run_at is Null OR Job.run_at < now + 10 mins + taken_at_earliest = arrow.now().shift(minutes=-config.JOB_TAKEN_RETRY_WAIT_MINS) + run_at_earliest = arrow.now().shift(minutes=+10) query = Job.filter( and_( or_( Job.state == JobState.ready.value, and_( Job.state == JobState.taken.value, - Job.taken_at - < arrow.now().shift(minutes=-config.JOB_TAKEN_RETRY_WAIT_MINS), + Job.taken_at < taken_at_earliest, Job.attempts < config.JOB_MAX_ATTEMPTS, ), ), - or_(Job.run_at.is_(None), and_(Job.run_at > min_dt, Job.run_at <= max_dt)), + or_(Job.run_at.is_(None), and_(Job.run_at <= run_at_earliest)), ) ) return query.all() diff --git a/tests/jobs/test_job_runner.py b/tests/jobs/test_job_runner.py index 9d0401e5..fc5aa6ba 100644 --- a/tests/jobs/test_job_runner.py +++ b/tests/jobs/test_job_runner.py @@ -12,8 +12,7 @@ def test_get_jobs_to_run(flask_client): expected_jobs_to_run = [ # Jobs in ready state Job.create(name="", payload=""), - Job.create(name="", payload="", run_at=now.shift(minutes=40)), - Job.create(name="", payload="", run_at=now.shift(minutes=-40)), + Job.create(name="", payload="", run_at=now), # Jobs in taken state Job.create( name="", @@ -33,14 +32,7 @@ def test_get_jobs_to_run(flask_client): payload="", state=JobState.taken.value, taken_at=now.shift(minutes=-(config.JOB_TAKEN_RETRY_WAIT_MINS + 10)), - run_at=now.shift(minutes=30), - ), - Job.create( - name="", - payload="", - state=JobState.taken.value, - taken_at=now.shift(minutes=-(config.JOB_TAKEN_RETRY_WAIT_MINS + 10)), - run_at=now.shift(minutes=-30), + run_at=now, ), ] # Jobs not to run @@ -63,14 +55,6 @@ def test_get_jobs_to_run(flask_client): taken_at=now.shift(minutes=-(config.JOB_TAKEN_RETRY_WAIT_MINS + 10)), run_at=now.shift(hours=3), ) - # Job taken with enough time but out of run_at zone - Job.create( - name="", - payload="", - state=JobState.taken.value, - taken_at=now.shift(minutes=-(config.JOB_TAKEN_RETRY_WAIT_MINS + 10)), - run_at=now.shift(hours=-3), - ) # Job out of attempts Job.create( name="",