diff --git a/SAS/DataManagement/StorageQueryService/cache.py b/SAS/DataManagement/StorageQueryService/cache.py index 0cbfe5ad1d63c707487f9fa62d508e79cfadc15b..a796298f8289cd125c914f9760f2cfe645475c10 100644 --- a/SAS/DataManagement/StorageQueryService/cache.py +++ b/SAS/DataManagement/StorageQueryService/cache.py @@ -373,7 +373,7 @@ class CacheManager: subdir_paths = [sdp for sdp in all_dirs if sdp.startswith(path) and sdp.count('/') == path_depth+1] - subdir_du_results = [self.getDiskUsageForPath(sd, force_update=force_update) for sd in subdir_paths] + subdir_du_results = self.getDiskUsageForPaths(subdir_paths, force_update=force_update).values() valid_subdir_du_results = [du for du in subdir_du_results if du.get('disk_usage')] sum_du = sum([du['disk_usage'] for du in valid_subdir_du_results]) @@ -500,19 +500,27 @@ class CacheManager: path_result = self.disk_usage.path_resolver.getPathForTask(radb_id=radb_id, mom_id=mom_id, otdb_id=otdb_id, include_scratch_paths=include_scratch_paths) if path_result['found']: - path_du_result = self.getDiskUsageForPath(path_result['path'], force_update=force_update) - path_du_result['radb_id'] = path_result.get('radb_id') - path_du_result['mom_id'] = path_result.get('mom_id') - path_du_result['otdb_id'] = path_result.get('otdb_id') + task_path = path_result['path'] + scratch_paths = path_result.get('scratch_paths', []) - if 'scratch_paths' in path_result: - path_du_result['scratch_paths'] = {} + # get all du's in parallel over all paths + paths = [task_path] + scratch_paths + paths_du_result = self.getDiskUsageForPaths(paths, force_update=force_update) + + # split into project and subdir + path_du_result = paths_du_result.pop(task_path) + scratch_du_result = paths_du_result + + task_du_result = dict(path_du_result) + + # yield id's for if available, or None + for id in ['radb_id', 'otdb_id', 'mom_id']: + task_du_result[id] = path_result.get(id) - for scratch_path in path_result['scratch_paths']: - scratch_path_du_result = self.getDiskUsageForPath(scratch_path, force_update=force_update) - path_du_result['scratch_paths'][scratch_path] = scratch_path_du_result + if scratch_du_result: + task_du_result['scratch_paths'] = scratch_du_result - return path_du_result + return task_du_result return {'found': False, 'path': path_result['path']}