Ejemplo n.º 1
0
 def dequeue(self, job: Job, worker: Worker):
     """
     Start working on a given job
     :param job: the job to start
     :param worker: the worker to assign to
     @raises NoResponseFromWorkerException if the connection fails
     """
     job.set_status('ACTIVE')
     priority = job.priority
     job.set_priority(None)
     result = self._master_communicator.assign_task(job, worker)
     if 'Exception' in result and result['Exception'] != 'None':
         if result['Exception'] == 'WorkerStatusException':
             worker.set_status(
                 self._master_communicator.get_status(worker)['status'])
             if worker.get_status() == 'WAITING':
                 self.dequeue(job, worker)
             else:
                 job.set_status('QUEUED')
                 job.set_priority(priority)
                 usable = Worker.get_idle_workers_for_storages(
                     job.source_alias, job.target_alias)
                 if usable:
                     self.dequeue(job, usable[0])
         elif result['Exception'] == 'NamingConventionError':
             job.set_error(
                 'NamingConventionError: The source file has a Filename that does not fit the Convention'
             )
             job.set_status('CANCELED')
             notification_handler.resolve_notification(job)
Ejemplo n.º 2
0
def test_get_queue():
    """
    /SA310/
    """
    jobs = Job.get_jobs(None, [JobStatus.QUEUED])
    for current_job in jobs:
        current_job.set_status(JobStatus.DONE)
    assert len(Job.get_jobs(None, [JobStatus.QUEUED])) == 0

    timestamp = datetime.datetime.now()

    try:
        admin = User.get_user_by_username("queueadmin1")
    except UserNotFoundException:
        admin = Administrator("queueadmin1", "token")

    job1 = Job('storageA', 'storageB', '~/.data/', [True, True, True], admin)
    job1_id = job1.get_job_id()
    job1.set_status(JobStatus.QUEUED)
    job1.set_enqueue_time(timestamp)
    job1.set_priority(1)

    try:
        user = User.get_user_by_username("queueuser1")
    except UserNotFoundException:
        user = Administrator("queueuser1", "token")

    job2 = Job('storageA', 'storageB', '~/.data/', [True, True, True], user)
    job2_id = job2.get_job_id()
    job2.set_status(JobStatus.QUEUED)
    job2.set_enqueue_time(timestamp)
    job2.set_priority(2)

    job3 = Job('storageA', 'storageB', '~/.data/', [True, True, True], user)
    job3_id = job3.get_job_id()
    job3.set_status(JobStatus.QUEUED)
    job3.set_enqueue_time(timestamp)
    job3.set_priority(3)

    response = json.loads(app.get_queue())
    assert len(response) == 3
    for job_json in response:
        job = Job.get_job_by_id(job_json['job_id'])
        assert job_json['job_id'] == job1_id or job_json[
            'job_id'] == job2_id or job_json['job_id'] == job3_id
        assert job_json['job_id'] == job.get_job_id()
        assert job_json['source'] == job.get_source_alias(
        ) + ":" + job.get_source_relative_path()
        assert job_json['enqueue_time'] == job.get_enqueue_time().isoformat()
        assert job_json['creator'] == job.get_user().get_username()
        assert job_json['priority'] == job.get_priority()
        assert job_json['status'] == job.get_status().name