def taskset_created(self, run_dir, task_definition_path): full_task_dir_paths = [] task_dirs = [] with open(task_definition_path) as fd: for line in fd.readlines(): line = line.strip() if line == "": continue group, task_dir = line.split(" ") task_dirs.append((int(group), task_dir)) with self.transaction() as db: db.execute("SELECT run_id FROM RUNS WHERE run_dir = ?", [run_dir]) run_id = db.fetchall()[0][0] for group, task_dir in task_dirs: if flock.finished_successfully(run_dir, task_dir): status = COMPLETED external_id = None else: external_id = flock.get_external_id(run_dir, task_dir) if external_id != None: status = SUBMITTED else: status = WAITING full_task_dir_path = os.path.join(run_dir, task_dir) db.execute("INSERT INTO TASKS (run_id, task_dir, status, try_count, group_number, external_id) values (?, ?, ?, 0, ?, ?)", [run_id, full_task_dir_path, status, group, external_id]) full_task_dir_paths.append(full_task_dir_path) self._cv_created.notify_all() return full_task_dir_paths
def update_tasks_which_disappeared(store, external_ids_of_actually_in_queue, external_id_to_task_dir, state_to_use_if_missing): external_ids_of_those_we_think_are_submitted = set(external_id_to_task_dir.keys()) # identify tasks which transitioned from running -> not running # and call these "missing" (assuming the db still claims these are running). All other transitions # should already be performed through other means. disappeared_external_ids = external_ids_of_those_we_think_are_submitted - external_ids_of_actually_in_queue log.info("external_ids_of_actually_in_queue = %s", external_ids_of_actually_in_queue) log.info("disappeared_external_ids = %s", disappeared_external_ids) for external_id in disappeared_external_ids: task_dir = external_id_to_task_dir[external_id] # check the filesystem to see if it really did succeed and we just missed the notification if flock.finished_successfully(None, task_dir): store.task_completed(task_dir) else: store.set_task_status(task_dir, state_to_use_if_missing)