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()
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()