Search in sources :

Example 1 with HttpException

use of org.jets3t.service.impl.rest.HttpException in project hadoop by apache.

the class Jets3tNativeFileSystemStore method processException.

/**
   * Handle any service exception by translating it into an IOException
   * @param thrown exception
   * @param original original exception -thrown if no other translation could
   * be made
   * @param key key sought from object store or "" for undefined
   * @return an exception to throw. If isProcessingCause==true this may be null.
   */
private IOException processException(Throwable thrown, Throwable original, String key) {
    IOException result;
    if (thrown.getCause() != null) {
        // recurse down
        result = processException(thrown.getCause(), original, key);
    } else if (thrown instanceof HttpException) {
        // nested HttpException - examine error code and react
        HttpException httpException = (HttpException) thrown;
        String responseMessage = httpException.getResponseMessage();
        int responseCode = httpException.getResponseCode();
        String bucketName = "s3n://" + bucket.getName();
        String text = String.format("%s : %03d : %s", bucketName, responseCode, responseMessage);
        String filename = !key.isEmpty() ? (bucketName + "/" + key) : text;
        IOException ioe;
        switch(responseCode) {
            case 404:
                result = new FileNotFoundException(filename);
                break;
            case // invalid range
            416:
                result = new EOFException(FSExceptionMessages.CANNOT_SEEK_PAST_EOF + ": " + filename);
                break;
            case //forbidden
            403:
                result = new AccessControlException("Permission denied" + ": " + filename);
                break;
            default:
                result = new IOException(text);
        }
        result.initCause(thrown);
    } else if (thrown instanceof S3ServiceException) {
        S3ServiceException se = (S3ServiceException) thrown;
        LOG.debug("S3ServiceException: {}: {} : {}", se.getS3ErrorCode(), se.getS3ErrorMessage(), se, se);
        if ("InvalidRange".equals(se.getS3ErrorCode())) {
            result = new EOFException(FSExceptionMessages.CANNOT_SEEK_PAST_EOF);
        } else {
            result = new S3Exception(se);
        }
    } else if (thrown instanceof ServiceException) {
        ServiceException se = (ServiceException) thrown;
        LOG.debug("S3ServiceException: {}: {} : {}", se.getErrorCode(), se.toString(), se, se);
        result = new S3Exception(se);
    } else if (thrown instanceof IOException) {
        result = (IOException) thrown;
    } else {
        // here there is no exception derived yet.
        // this means no inner cause, and no translation made yet.
        // convert the original to an IOException -rather than just the
        // exception at the base of the tree
        result = new S3Exception(original);
    }
    return result;
}
Also used : ServiceException(org.jets3t.service.ServiceException) S3ServiceException(org.jets3t.service.S3ServiceException) FileNotFoundException(java.io.FileNotFoundException) EOFException(java.io.EOFException) AccessControlException(org.apache.hadoop.security.AccessControlException) HttpException(org.jets3t.service.impl.rest.HttpException) IOException(java.io.IOException) S3ServiceException(org.jets3t.service.S3ServiceException)

Aggregations

EOFException (java.io.EOFException)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 AccessControlException (org.apache.hadoop.security.AccessControlException)1 S3ServiceException (org.jets3t.service.S3ServiceException)1 ServiceException (org.jets3t.service.ServiceException)1 HttpException (org.jets3t.service.impl.rest.HttpException)1