示例#1
0
def trigger_job(instances_db,
                job_id,
                jobs_db,
                botleague_liaison_host,
                docker_tag=None,
                job_type=JOB_TYPE_EVAL):
    docker_tag = docker_tag or 'deepdriveio/problem-worker-test'
    eval_mgr = JobManager(jobs_db=jobs_db, instances_db=instances_db)
    eval_mgr.check_for_finished_jobs()
    test_job = Box(botleague_liaison_host=botleague_liaison_host,
                   status=JOB_STATUS_CREATED,
                   id=job_id,
                   job_type=job_type,
                   eval_spec=Box(docker_tag=docker_tag,
                                 eval_id=utils.generate_rand_alphanumeric(32),
                                 eval_key='fake_eval_key',
                                 seed=1,
                                 problem='domain_randomization',
                                 pull_request=None,
                                 max_seconds=20))

    # Make a copy of prod instances
    prod_instances_db = get_worker_instances_db(force_firestore_db=True)
    for inst in prod_instances_db.where('id', '>', ''):
        instances_db.set(inst.id, inst)

    try:
        eval_mgr.jobs_db.set(job_id, test_job)
        new_jobs, exceptions = eval_mgr.assign_jobs()
        assert not exceptions
        if new_jobs:
            # We don't actually start instances but we act like we did.
            assert new_jobs[0].status == JOB_STATUS_CREATED or \
                   new_jobs[0].instance_id

            if 'instance_id' in new_jobs[0]:
                instance_meta = eval_mgr.instances_db.get(
                    new_jobs[0].instance_id)

                # So we have real instance meta, but inserted the job into a
                # test collection that the instance is not watching.
                # So the job will not actually run.
                assert instance_meta.status == INSTANCE_STATUS_USED
        else:
            log.warning('Test did not find an instance to run. TODO: use'
                        ' test instance data.')
    finally:
        if jobs_db is not None:
            jobs_db.delete_all_test_data()
        if instances_db is not None:
            instances_db.delete_all_test_data()
示例#2
0
def main():
    job_manager = JobManager()

    if '--check-for-finished-jobs' in sys.argv:
        job_manager.check_for_finished_jobs()

    def loop_fn():
        ping_cronitor('run')
        # ci_mgr.run()
        job_manager.run()
        ping_cronitor('complete')

    SingletonLoop(loop_name=constants.JOB_LOOP_ID,
                  fn=loop_fn).run()