diff --git a/orchestrator/tasks.py b/orchestrator/tasks.py index 70273866..8fe0f38b 100644 --- a/orchestrator/tasks.py +++ b/orchestrator/tasks.py @@ -275,25 +275,36 @@ def terminate_job(job): def set_permission(job): - first_dir = job.root_dir.replace(job.base_dir, "").split("/")[0] - permissions_dir = "/".join([job.base_dir, first_dir]).replace("//", "/") + failed_to_set = None + dirs = job.root_dir.replace(job.base_dir, "").split("/") permission_str = job.root_permission - try: - permission_octal = int(permission_str, 8) - except Exception: - raise TypeError("Could not convert %s to permission octal" % str(permission_str)) - try: - os.chmod(permissions_dir, permission_octal) - for root, dirs, files in os.walk(permissions_dir): - for single_dir in dirs: - if oct(os.lstat(os.path.join(root, single_dir)).st_mode)[-3:] != permission_octal: - logger.info(f"Setting permissions for {os.path.join(root, single_dir)}") - os.chmod(os.path.join(root, single_dir), permission_octal) - for single_file in files: - if oct(os.lstat(os.path.join(root, single_file)).st_mode)[-3:] != permission_octal: - logger.info(f"Setting permissions for {os.path.join(root, single_file)}") - os.chmod(os.path.join(root, single_file), permission_octal) - except Exception: + permissions_dir = job.base_dir + for d in dirs: + failed_to_set = False + permissions_dir = "/".join([permissions_dir, d]).replace("//", "/") + try: + permission_octal = int(permission_str, 8) + except Exception: + raise TypeError("Could not convert %s to permission octal" % str(permission_str)) + try: + os.chmod(permissions_dir, permission_octal) + for root, dirs, files in os.walk(permissions_dir): + for single_dir in dirs: + if oct(os.lstat(os.path.join(root, single_dir)).st_mode)[-3:] != permission_octal: + logger.info(f"Setting permissions for {os.path.join(root, single_dir)}") + os.chmod(os.path.join(root, single_dir), permission_octal) + for single_file in files: + if oct(os.lstat(os.path.join(root, single_file)).st_mode)[-3:] != permission_octal: + logger.info(f"Setting permissions for {os.path.join(root, single_file)}") + os.chmod(os.path.join(root, single_file), permission_octal) + except Exception: + logger.error(f"Failed to set permissions for directory {permissions_dir}") + failed_to_set = True + continue + else: + logger.info(f"Permissions set for directory {permissions_dir}") + break + if failed_to_set: raise RuntimeError("Failed to change permission of directory %s" % permissions_dir) diff --git a/ridgeback/__init__.py b/ridgeback/__init__.py index b3f408df..c347ac29 100644 --- a/ridgeback/__init__.py +++ b/ridgeback/__init__.py @@ -1 +1 @@ -__version__ = "1.28.0" +__version__ = "1.29.0" diff --git a/submitter/toil_submitter/toil_jobsubmitter.py b/submitter/toil_submitter/toil_jobsubmitter.py index 6f62616f..ee4070f3 100644 --- a/submitter/toil_submitter/toil_jobsubmitter.py +++ b/submitter/toil_submitter/toil_jobsubmitter.py @@ -114,7 +114,7 @@ def get_outputs(self): if self.log_dir: output_log_location = os.path.join(self.log_dir, "output.json") with open(output_log_location, "w") as f: - json.dump(self.inputs, f) + json.dump(result_json, f) return result_json, error_message