def test_schedule_id_jobs_ct_1(): v = [(0, 59, [(17, 32)]), (60, 100, [(1, 32)])] res = [(1, 32)] ss = SlotSet(Slot(1, 0, 0, res, 0, 100)) all_ss = {'default': ss} hy = {'node': [[(1, 8)], [(9, 16)], [(17, 24)], [(25, 32)]]} j1 = JobPseudo(id=1, types={}, key_cache="", mld_res_rqts=[ (1, 60, [([("node", 2)], res)] ) ], ts=False, ph=0) schedule_id_jobs_ct(all_ss, {1: j1}, hy, [1], 20) assert compare_slots_val_ref(ss.slots, v) is True
def schedule_cycle(plt, queue='default'): now = plt.get_time() logger.info('Begin scheduling....', now) # # Retrieve waiting jobs # waiting_jobs, waiting_jids, nb_waiting_jobs = plt.get_waiting_jobs(queue) logger.info(waiting_jobs, waiting_jids, nb_waiting_jobs) if nb_waiting_jobs > 0: # # Determine Global Resource Intervals and Initial Slot # resource_set = plt.resource_set() initial_slot_set = SlotSet((resource_set.roid_itvs, now)) # # Resource availabilty (Available_upto field) is integrated through pseudo job # pseudo_jobs = [] for t_avail_upto in sorted(resource_set.available_upto.keys()): itvs = resource_set.available_upto[t_avail_upto] j = JobPseudo() # logger.info(t_avail_upto, MAX_TIME - t_avail_upto, itvs) j.start_time = t_avail_upto j.walltime = MAX_TIME - t_avail_upto j.res_set = itvs j.ts = False j.ph = NO_PLACEHOLDER pseudo_jobs.append(j) if pseudo_jobs != []: initial_slot_set.split_slots_jobs(pseudo_jobs) # # Get additional waiting jobs' data # job_security_time = int(config["SCHEDULER_JOB_SECURITY_TIME"]) plt.get_data_jobs(waiting_jobs, waiting_jids, resource_set, job_security_time) # # Get already scheduled jobs advanced reservations and jobs from more higher priority queues # scheduled_jobs = plt.get_scheduled_jobs(resource_set, job_security_time, now) if scheduled_jobs != []: initial_slot_set.split_slots_jobs(scheduled_jobs) # initial_slot_set.show_slots() all_slot_sets = {"default": initial_slot_set} # # Scheduled # schedule_id_jobs_ct(all_slot_sets, waiting_jobs, resource_set.hierarchy, waiting_jids, 0) # # Save assignement # plt.save_assigns(waiting_jobs, resource_set) else: logger.info("no waiting jobs")