Skip to content

Commit

Permalink
srmclient: fix error message for ls
Browse files Browse the repository at this point in the history
Motivation:

The stat and ls command failures report only the request-level error
message.  This provides no useful information on why this particular
file failed.

Modification:

Use the file-level message when reporting a problem.

Result:

Better error messages.

Target: master
Request: 2.16
Requires-notes: yes
Requires-book: no
Patch: https://rb.dcache.org/r/9734/
Acked-by: Gerd Behrmann
  • Loading branch information
paulmillar committed Sep 19, 2016
1 parent 7ce53ee commit 03cca24
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 16 deletions.
Expand Up @@ -32,6 +32,8 @@

import eu.emi.security.authn.x509.X509Credential;

import java.util.Collections;

import org.dcache.srm.SRMException;
import org.dcache.srm.SRMInvalidPathException;
import org.dcache.srm.v2_2.ArrayOfAnyURI;
Expand Down Expand Up @@ -85,6 +87,7 @@

import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.ObjectArrays.concat;
import static org.dcache.srm.shell.TStatusCodes.checkBulkSuccess;
import static org.dcache.srm.shell.TStatusCodes.checkSuccess;

@ParametersAreNonnullByDefault
Expand Down Expand Up @@ -134,17 +137,19 @@ public TMetaDataPathDetail stat(URI surl) throws RemoteException, SRMException
new SrmLsRequest(null, new ArrayOfAnyURI(new URI[]{surl}), null, null, true, false, 0, 0, 1));
if (response.getReturnStatus().getStatusCode() != TStatusCode.SRM_REQUEST_QUEUED &&
response.getReturnStatus().getStatusCode() != TStatusCode.SRM_REQUEST_INPROGRESS) {
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
return response.getDetails().getPathDetailArray(0);
TMetaDataPathDetail details = response.getDetails().getPathDetailArray(0);
checkBulkSuccess(response.getReturnStatus(), Collections.singletonList(details.getStatus()));
return details;
} else {
SrmStatusOfLsRequestResponse status;
do {
status = srm.srmStatusOfLsRequest(
new SrmStatusOfLsRequestRequest(null, response.getRequestToken(), 0, 1));
} while (response.getReturnStatus().getStatusCode() == TStatusCode.SRM_REQUEST_QUEUED ||
response.getReturnStatus().getStatusCode() == TStatusCode.SRM_REQUEST_INPROGRESS);
checkSuccess(status.getReturnStatus(), TStatusCode.SRM_SUCCESS);
return status.getDetails().getPathDetailArray(0);
TMetaDataPathDetail details = response.getDetails().getPathDetailArray(0);
checkBulkSuccess(response.getReturnStatus(), Collections.singletonList(details.getStatus()));
return details;
}
}

Expand All @@ -153,7 +158,7 @@ public TMetaDataPathDetail stat(URI surl) throws RemoteException, SRMException
public TPermissionMode checkPermission(URI surl) throws RemoteException, SRMException
{
TSURLPermissionReturn[] permission = checkPermissions(surl);
checkSuccess(permission[0].getStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(permission[0].getStatus());
return permission[0].getPermission();
}

Expand Down Expand Up @@ -181,7 +186,7 @@ public TSURLPermissionReturn[] checkPermissions(URI... surls) throws RemoteExcep
public TPermissionReturn getPermission(URI surl) throws RemoteException, SRMException
{
TPermissionReturn[] permission = getPermissions(surl);
checkSuccess(permission[0].getStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(permission[0].getStatus());
return permission[0];
}

Expand Down Expand Up @@ -236,8 +241,9 @@ private TMetaDataPathDetail list(URI surl, boolean verbose, int offset,
response.setDetails(status.getDetails());
response.setReturnStatus(status.getReturnStatus());
}
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
return response.getDetails().getPathDetailArray()[0];
TMetaDataPathDetail details = response.getDetails().getPathDetailArray()[0];
checkBulkSuccess(response.getReturnStatus(), Collections.singletonList(details.getStatus()));
return details;
}

@Nonnull
Expand Down Expand Up @@ -274,7 +280,7 @@ public TSupportedTransferProtocol[] getTransferProtocols() throws SRMException,
{
SrmGetTransferProtocolsResponse response =
srm.srmGetTransferProtocols(new SrmGetTransferProtocolsRequest());
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(response.getReturnStatus());
TSupportedTransferProtocol[] protocolArray = response.getProtocolInfo().getProtocolArray();
return (protocolArray == null) ? new TSupportedTransferProtocol[0] : protocolArray;
}
Expand All @@ -283,14 +289,14 @@ public TSupportedTransferProtocol[] getTransferProtocols() throws SRMException,
public void mkdir(URI surl) throws RemoteException, SRMException
{
SrmMkdirResponse response = srm.srmMkdir(new SrmMkdirRequest(null, surl, null));
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(response.getReturnStatus());
}

@Override
public void rmdir(URI lookup, boolean recursive) throws RemoteException, SRMException
{
SrmRmdirResponse response = srm.srmRmdir(new SrmRmdirRequest(null, lookup, null, recursive));
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(response.getReturnStatus());
}

@Nonnull
Expand All @@ -299,7 +305,7 @@ public SrmRmResponse rm(URI... surls) throws RemoteException, SRMException
{
SrmRmResponse response = srm.srmRm(new SrmRmRequest(null, new ArrayOfAnyURI(surls), null));
if (response.getArrayOfFileStatuses().getStatusArray() == null) {
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(response.getReturnStatus());
} else {
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS, TStatusCode.SRM_PARTIAL_SUCCESS,
TStatusCode.SRM_FAILURE);
Expand All @@ -311,7 +317,7 @@ public SrmRmResponse rm(URI... surls) throws RemoteException, SRMException
public void mv(URI fromSurl, URI toSurl) throws RemoteException, SRMException
{
SrmMvResponse response = srm.srmMv(new SrmMvRequest(null, fromSurl, toSurl, null));
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(response.getReturnStatus());
}

@Nonnull
Expand All @@ -320,7 +326,7 @@ public String[] getSpaceTokens(String userSpaceTokenDescription) throws RemoteEx
{
SrmGetSpaceTokensResponse response = srm.srmGetSpaceTokens(
new SrmGetSpaceTokensRequest(userSpaceTokenDescription, null));
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(response.getReturnStatus());
ArrayOfString arrayOfSpaceTokens = response.getArrayOfSpaceTokens();
return (arrayOfSpaceTokens != null) ? arrayOfSpaceTokens.getStringArray() : new String[0];
}
Expand Down Expand Up @@ -370,7 +376,7 @@ public void releaseSpace(String spaceToken) throws RemoteException, SRMException
{
SrmReleaseSpaceResponse response = srm.srmReleaseSpace(
new SrmReleaseSpaceRequest(null, spaceToken, null, null));
checkSuccess(response.getReturnStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(response.getReturnStatus());
}

@Nonnull
Expand All @@ -396,7 +402,7 @@ public TMetaDataSpace[] getSpaceMetaData(String... spaceTokens) throws RemoteExc
public TMetaDataSpace getSpaceMetaData(String spaceToken) throws RemoteException, SRMException
{
TMetaDataSpace space = getSpaceMetaData(new String[]{spaceToken})[0];
checkSuccess(space.getStatus(), TStatusCode.SRM_SUCCESS);
checkSuccess(space.getStatus());
return space;
}

Expand Down
Expand Up @@ -32,6 +32,28 @@ private TStatusCodes()
// Utility class: prevent initialisation
}

/**
* Check the status of a bulk operation. If the result is PARTIAL_SUCCESS
* or FAILURE then also check the result at the file level.
*/
public static void checkBulkSuccess(TReturnStatus requestStatus,
Iterable<TReturnStatus> fileStatuses) throws SRMException
{
TStatusCode code = requestStatus.getStatusCode();
if (code == TStatusCode.SRM_FAILURE || code == TStatusCode.SRM_PARTIAL_SUCCESS) {
for (TReturnStatus status : fileStatuses) {
checkSuccess(status);
}
} else {
checkSuccess(requestStatus);
}
}

public static void checkSuccess(TReturnStatus returnStatus) throws SRMException
{
checkSuccess(returnStatus, TStatusCode.SRM_SUCCESS);
}

public static void checkSuccess(TReturnStatus returnStatus, TStatusCode... success) throws SRMException
{
TStatusCode statusCode = returnStatus.getStatusCode();
Expand Down

0 comments on commit 03cca24

Please sign in to comment.