Пример #1
0
 def test_get_queue_for_job_without_job_queue_name(self):
     """
     Tests that scheduler gets the scheduler queue for the job
     when queue name is not provided for that job.
     """
     queue = Queue('scheduler_foo', connection=self.testconn)
     scheduler = Scheduler(connection=self.testconn, queue=queue)
     job = scheduler._create_job(say_hello)
     self.assertEqual(scheduler.get_queue_for_job(job), queue)
Пример #2
0
    def requeue(*args, **kwargs):
        """Inverval check for scheduled jobs."""
        job = args[0]

        queue = Scheduler.get_queue_for_job(build_scheduler, job)
        scheduler_log.info(
            f"job {job.id}:{job.func_name} re/queued to {queue.name}")

        return queue
Пример #3
0
 def test_get_queue_for_job_with_job_queue_name(self):
     """
     Tests that scheduler gets the correct queue for the job when
     queue_name is provided.
     """
     queue = Queue('scheduler_foo', connection=self.testconn)
     job_queue = Queue('job_foo', connection=self.testconn)
     scheduler = Scheduler(connection=self.testconn, queue=queue)
     job = scheduler._create_job(say_hello, queue_name='job_foo')
     self.assertEqual(scheduler.get_queue_for_job(job), job_queue)
Пример #4
0
 def test_enqueue_job_with_job_queue_name(self):
     """
     Ensure that job is enqueued correctly when queue_name is provided
     at job creation
     """
     queue = Queue('foo', connection=self.testconn)
     job_queue = Queue('job_foo', connection=self.testconn)
     scheduler = Scheduler(connection=self.testconn, queue=queue)
     job = scheduler._create_job(say_hello, queue_name='job_foo')
     self.assertEqual(scheduler.get_queue_for_job(job), job_queue)
     scheduler.enqueue_job(job)
     self.assertTrue(job.enqueued_at is not None)
     self.assertIn(job, job_queue.jobs)
     self.assertIn(job_queue, Queue.all())
Пример #5
0
 def test_enqueue_job_with_scheduler_queue(self):
     """
     Ensure that job is enqueued correctly when the scheduler is bound
     to a queue object and job queue name is not provided.
     """
     queue = Queue('foo', connection=self.testconn)
     scheduler = Scheduler(connection=self.testconn, queue=queue)
     job = scheduler._create_job(say_hello)
     scheduler_queue = scheduler.get_queue_for_job(job)
     self.assertEqual(queue, scheduler_queue)
     scheduler.enqueue_job(job)
     self.assertTrue(job.enqueued_at is not None)
     self.assertIn(job, queue.jobs)
     self.assertIn(queue, Queue.all())
Пример #6
0
 def test_enqueue_job_with_queue(self):
     """
     Ensure that job is enqueued correctly when the scheduler is bound
     to a queue object.
     """
     queue = Queue('foo', connection=self.testconn)
     scheduler = Scheduler(connection=self.testconn, queue=queue)
     job = scheduler._create_job(say_hello)
     scheduler_queue = scheduler.get_queue_for_job(job)
     self.assertEqual(queue, scheduler_queue)
     scheduler.enqueue_job(job)
     self.assertTrue(job.enqueued_at is not None)
     self.assertIn(job, queue.jobs)
     self.assertIn(queue, Queue.all())
Пример #7
0
 def test_enqueue_job(self):
     """
     When scheduled job is enqueued, make sure:
     - Job is removed from the sorted set of scheduled jobs
     - "enqueued_at" attribute is properly set
     - Job appears in the right queue
     """
     now = datetime.now()
     queue_name = 'foo'
     scheduler = Scheduler(connection=self.testconn, queue_name=queue_name)
     job = scheduler.enqueue_at(now, say_hello)
     scheduler.enqueue_job(job)
     self.assertNotIn(job, self.testconn.zrange(scheduler.scheduled_jobs_key, 0, 10))
     job = Job.fetch(job.id, connection=self.testconn)
     self.assertTrue(job.enqueued_at is not None)
     queue = scheduler.get_queue_for_job(job)
     self.assertIn(job, queue.jobs)
     queue = Queue.from_queue_key('rq:queue:{0}'.format(queue_name))
     self.assertIn(job, queue.jobs)
Пример #8
0
def schedule():
    """Creates scheduler object."""
    setup_loghandlers(level=DEPLOYMENT_LOG_LEVEL)

    build_scheduler = Scheduler(connection=WorkerQueues.connection)

    scheduler_log.info("scheduler created")

    cleanup_interval = int(os.getenv("RENKU_SVC_CLEANUP_INTERVAL", 60))
    scheduler_log.info("cleanup interval set to {}".format(cleanup_interval))

    def requeue(*args, **kwargs):
        """Inverval check for scheduled jobs."""
        job = args[0]

        queue = Scheduler.get_queue_for_job(build_scheduler, job)
        scheduler_log.info(
            f"job {job.id}:{job.func_name} re/queued to {queue.name}")

        return queue

    # NOTE: Patch scheduler to have requeing information on INFO log level.
    build_scheduler.get_queue_for_job = requeue

    build_scheduler.schedule(
        scheduled_time=datetime.utcnow(),
        queue_name=CLEANUP_QUEUE_FILES,
        func=cache_files_cleanup,
        interval=cleanup_interval,
        result_ttl=cleanup_interval + 1,
    )

    build_scheduler.schedule(
        scheduled_time=datetime.utcnow(),
        queue_name=CLEANUP_QUEUE_PROJECTS,
        func=cache_project_cleanup,
        interval=cleanup_interval,
        result_ttl=cleanup_interval + 1,
    )

    scheduler_log.info(f"log level set to {DEPLOYMENT_LOG_LEVEL}")
    yield build_scheduler