use of org.dcache.srm.v2_2.TStatusCode.SRM_PARTIAL_SUCCESS in project dcache by dCache.
the class SrmHandler method toGetRequestSummaryResponse.
private SrmGetRequestSummaryResponse toGetRequestSummaryResponse(Map<String, ListenableFuture<TRequestSummary>> futureMap) throws InterruptedException, CacheException, NoRouteToCellException {
boolean hasFailure = false;
boolean hasSuccess = false;
List<TRequestSummary> summaries = new ArrayList<>();
for (Map.Entry<String, ListenableFuture<TRequestSummary>> entry : futureMap.entrySet()) {
try {
summaries.add(entry.getValue().get());
hasSuccess = true;
} catch (ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof SRMException) {
summaries.add(createRequestSummaryFailure(entry.getKey(), ((SRMException) cause).getStatusCode(), cause.getMessage()));
hasFailure = true;
} else {
Throwables.throwIfInstanceOf(cause, CacheException.class);
Throwables.throwIfInstanceOf(cause, NoRouteToCellException.class);
Throwables.throwIfUnchecked(e);
throw new RuntimeException(e);
}
}
}
TReturnStatus status;
if (!hasFailure) {
status = new TReturnStatus(SRM_SUCCESS, "All request statuses have been retrieved.");
} else if (hasSuccess) {
status = new TReturnStatus(SRM_PARTIAL_SUCCESS, "Some request statuses have been retrieved.");
} else {
status = new TReturnStatus(SRM_FAILURE, "No request statuses have been retrieved.");
}
return new SrmGetRequestSummaryResponse(status, new ArrayOfTRequestSummary(summaries.toArray(TRequestSummary[]::new)));
}
Aggregations