use of org.dcache.srm.SRMTooManyResultsException in project dcache by dCache.
the class LsFileRequest method getRecursiveMetaDataPathDetail.
private void getRecursiveMetaDataPathDetail(TMetaDataPathDetail metaDataPathDetail, FileMetaData fmd, int depth, long offset, long count, int recursionDepth, boolean longFormat) throws SRMException, URISyntaxException {
if (!fmd.isDirectory || depth >= recursionDepth) {
return;
}
List<FileMetaData> directoryList;
URI surl = new URI(null, null, metaDataPathDetail.getPath(), null);
// rely on our own counting
if (offset == 0) {
//
// if offset=0, trivial case, just grab information w/ verbosity level
// provided by the user
//
directoryList = getStorage().listDirectory(getUser(), surl, longFormat, 0, (int) count);
} else {
//
// if offset!=0, we loop over direntries in non-verbose mode until
// we hit offset, then start getting information with verbosity
// level specified by the user by calling getStorage().getFileMetaData on
// each entry
//
directoryList = getStorage().listDirectory(getUser(), surl, false, 0, Integer.MAX_VALUE);
}
//
// sort list such that directories are at the end of the list after
// sorting. The intent is to leave the recursion calls at the
// end of the tree, so we have less chance to even get there
//
Collections.sort(directoryList, DIRECTORY_LAST_ORDER);
List<TMetaDataPathDetail> metadataPathDetailList = new LinkedList<>();
for (FileMetaData md : directoryList) {
URI subpath = new URI(null, null, md.SURL, null);
TMetaDataPathDetail dirMetaDataPathDetail;
if (offset == 0) {
dirMetaDataPathDetail = convertFileMetaDataToTMetaDataPathDetail(subpath, md, longFormat);
} else {
FileMetaData fileMetaData = md;
if (!getContainerRequest().shouldSkipThisRecord()) {
if (longFormat) {
fileMetaData = getStorage().getFileMetaData(getUser(), subpath, false);
}
dirMetaDataPathDetail = convertFileMetaDataToTMetaDataPathDetail(subpath, fileMetaData, longFormat);
} else {
//
// skip this record - meaning count it, and request only minimal details, do not store it
//
dirMetaDataPathDetail = convertFileMetaDataToTMetaDataPathDetail(subpath, fileMetaData, false);
}
}
if (!getContainerRequest().shouldSkipThisRecord()) {
metadataPathDetailList.add(dirMetaDataPathDetail);
try {
if (!getContainerRequest().increaseResultsNumAndContinue()) {
break;
}
} catch (SRMTooManyResultsException e) {
metaDataPathDetail.setStatus(new TReturnStatus(TStatusCode.SRM_FAILURE, e.getMessage()));
break;
}
}
//
// increment global entries counter
//
getContainerRequest().incrementGlobalEntryCounter();
if (md.isDirectory) {
try {
getRecursiveMetaDataPathDetail(dirMetaDataPathDetail, md, depth + 1, offset, count, recursionDepth, longFormat);
} catch (SRMException e) {
String msg = e.getMessage();
if (e instanceof SRMAuthorizationException) {
dirMetaDataPathDetail.setStatus(new TReturnStatus(TStatusCode.SRM_AUTHORIZATION_FAILURE, msg));
} else if (e instanceof SRMInvalidPathException) {
dirMetaDataPathDetail.setStatus(new TReturnStatus(TStatusCode.SRM_INVALID_PATH, msg));
} else {
dirMetaDataPathDetail.setStatus(new TReturnStatus(TStatusCode.SRM_FAILURE, msg));
}
}
}
}
metaDataPathDetail.setArrayOfSubPaths(new ArrayOfTMetaDataPathDetail(metadataPathDetailList.toArray(TMetaDataPathDetail[]::new)));
}
use of org.dcache.srm.SRMTooManyResultsException in project dcache by dCache.
the class LsFileRequest method getMetaDataPathDetail.
private void getMetaDataPathDetail(TMetaDataPathDetail metaDataPathDetail, long offset, long count, boolean longFormat) throws SRMException, URISyntaxException {
List<FileMetaData> directoryList;
//
// simplify things for the most common case when people perform
// ls on directory w/o specifying recursionDepth
//
URI surl = new URI(null, null, metaDataPathDetail.getPath(), null);
directoryList = getStorage().listDirectory(getUser(), surl, longFormat, (int) offset, (int) count);
getContainerRequest().setCounter(offset);
List<TMetaDataPathDetail> metadataPathDetailList = new LinkedList<>();
for (FileMetaData md : directoryList) {
URI subpath = new URI(null, null, md.SURL, null);
TMetaDataPathDetail dirMetaDataPathDetail = convertFileMetaDataToTMetaDataPathDetail(subpath, md, longFormat);
if (!getContainerRequest().shouldSkipThisRecord()) {
metadataPathDetailList.add(dirMetaDataPathDetail);
try {
if (!getContainerRequest().increaseResultsNumAndContinue()) {
break;
}
} catch (SRMTooManyResultsException e) {
metaDataPathDetail.setStatus(new TReturnStatus(TStatusCode.SRM_FAILURE, e.getMessage()));
break;
}
}
//
// increment global entries counter
//
getContainerRequest().incrementGlobalEntryCounter();
}
metaDataPathDetail.setArrayOfSubPaths(new ArrayOfTMetaDataPathDetail(metadataPathDetailList.toArray(TMetaDataPathDetail[]::new)));
}
use of org.dcache.srm.SRMTooManyResultsException in project dcache by dCache.
the class TStatusCodes method checkSuccess.
public static void checkSuccess(TReturnStatus returnStatus, TStatusCode... success) throws SRMException {
TStatusCode statusCode = returnStatus.getStatusCode();
String explanation = returnStatus.getExplanation();
if (asList(success).contains(statusCode)) {
return;
}
if (explanation == null) {
explanation = "Operation failed with " + returnStatus.getStatusCode();
}
if (statusCode == TStatusCode.SRM_FAILURE) {
throw new SRMException(explanation);
} else if (statusCode == TStatusCode.SRM_PARTIAL_SUCCESS) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_AUTHENTICATION_FAILURE) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_AUTHORIZATION_FAILURE) {
throw new SRMAuthorizationException(explanation);
} else if (statusCode == TStatusCode.SRM_INVALID_REQUEST) {
throw new SRMInvalidRequestException(explanation);
} else if (statusCode == TStatusCode.SRM_INVALID_PATH) {
throw new SRMInvalidPathException(explanation);
} else if (statusCode == TStatusCode.SRM_FILE_LIFETIME_EXPIRED) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_SPACE_LIFETIME_EXPIRED) {
throw new SRMSpaceLifetimeExpiredException(explanation);
} else if (statusCode == TStatusCode.SRM_EXCEED_ALLOCATION) {
throw new SRMExceedAllocationException(explanation);
} else if (statusCode == TStatusCode.SRM_NO_USER_SPACE) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_NO_FREE_SPACE) {
throw new SRMNoFreeSpaceException(explanation);
} else if (statusCode == TStatusCode.SRM_DUPLICATION_ERROR) {
throw new SRMDuplicationException(explanation);
} else if (statusCode == TStatusCode.SRM_NON_EMPTY_DIRECTORY) {
throw new SRMNonEmptyDirectoryException(explanation);
} else if (statusCode == TStatusCode.SRM_TOO_MANY_RESULTS) {
throw new SRMTooManyResultsException(explanation);
} else if (statusCode == TStatusCode.SRM_INTERNAL_ERROR) {
throw new SRMInternalErrorException(explanation);
} else if (statusCode == TStatusCode.SRM_FATAL_INTERNAL_ERROR) {
throw new SRMInternalErrorException(explanation);
} else if (statusCode == TStatusCode.SRM_NOT_SUPPORTED) {
throw new SRMNotSupportedException(explanation);
} else if (statusCode == TStatusCode.SRM_REQUEST_QUEUED) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_REQUEST_INPROGRESS) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_ABORTED) {
throw new SRMAbortedException(explanation);
} else if (statusCode == TStatusCode.SRM_RELEASED) {
throw new SRMReleasedException(explanation);
} else if (statusCode == TStatusCode.SRM_FILE_PINNED) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_FILE_IN_CACHE) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_SPACE_AVAILABLE) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_LOWER_SPACE_GRANTED) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_REQUEST_TIMED_OUT) {
throw new SRMRequestTimedOutException(explanation);
} else if (statusCode == TStatusCode.SRM_LAST_COPY) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_FILE_BUSY) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_FILE_LOST) {
throw new SRMOtherException(statusCode, explanation);
} else if (statusCode == TStatusCode.SRM_FILE_UNAVAILABLE) {
throw new SRMFileUnvailableException(explanation);
} else if (statusCode == TStatusCode.SRM_CUSTOM_STATUS) {
throw new SRMOtherException(statusCode, explanation);
} else {
throw new SRMOtherException(statusCode, explanation);
}
}
Aggregations