Esempio n. 1
0
    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
Esempio n. 2
0
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)