Handle HttpResponseException in S3ProxyHandlerJetty

pull/224/head
Rached Ben Mustapha 2017-05-10 16:58:01 -07:00 zatwierdzone przez Andrew Gaul
rodzic 525c6e2275
commit e23e9b78e4
2 zmienionych plików z 36 dodań i 36 usunięć

Wyświetl plik

@ -99,8 +99,6 @@ import org.jclouds.blobstore.options.GetOptions;
import org.jclouds.blobstore.options.ListContainerOptions; import org.jclouds.blobstore.options.ListContainerOptions;
import org.jclouds.blobstore.options.PutOptions; import org.jclouds.blobstore.options.PutOptions;
import org.jclouds.domain.Location; import org.jclouds.domain.Location;
import org.jclouds.http.HttpResponse;
import org.jclouds.http.HttpResponseException;
import org.jclouds.io.ContentMetadata; import org.jclouds.io.ContentMetadata;
import org.jclouds.io.ContentMetadataBuilder; import org.jclouds.io.ContentMetadataBuilder;
import org.jclouds.io.Payload; import org.jclouds.io.Payload;
@ -1706,7 +1704,6 @@ public class S3ProxyHandler {
} }
String eTag; String eTag;
try {
BlobBuilder.PayloadBlobBuilder builder = blobStore BlobBuilder.PayloadBlobBuilder builder = blobStore
.blobBuilder(blobName) .blobBuilder(blobName)
.payload(is) .payload(is)
@ -1719,23 +1716,6 @@ public class S3ProxyHandler {
eTag = blobStore.putBlob(containerName, builder.build(), eTag = blobStore.putBlob(containerName, builder.build(),
options); options);
} catch (HttpResponseException hre) {
HttpResponse hr = hre.getResponse();
if (hr == null) {
return;
}
int status = hr.getStatusCode();
switch (status) {
case HttpServletResponse.SC_BAD_REQUEST:
case 422: // Swift returns 422 Unprocessable Entity
throw new S3Exception(S3ErrorCode.BAD_DIGEST);
default:
// TODO: emit hre.getContent() ?
response.sendError(status);
break;
}
return;
}
response.addHeader(HttpHeaders.ETAG, maybeQuoteETag(eTag)); response.addHeader(HttpHeaders.ETAG, maybeQuoteETag(eTag));
} }

Wyświetl plik

@ -50,6 +50,13 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
ignoreUnknownHeaders, corsAllowAll, servicePath); ignoreUnknownHeaders, corsAllowAll, servicePath);
} }
private void sendS3Exception(HttpServletRequest request,
HttpServletResponse response, S3Exception se)
throws IOException {
handler.sendSimpleErrorResponse(request, response,
se.getError(), se.getMessage(), se.getElements());
}
@Override @Override
public void handle(String target, Request baseRequest, public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response) HttpServletRequest request, HttpServletResponse response)
@ -69,10 +76,24 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
baseRequest.setHandled(true); baseRequest.setHandled(true);
return; return;
} catch (HttpResponseException hre) { } catch (HttpResponseException hre) {
HttpResponse httpResponse = hre.getResponse(); HttpResponse hr = hre.getResponse();
response.sendError(httpResponse == null ? if (hr == null) {
HttpServletResponse.SC_INTERNAL_SERVER_ERROR : response.sendError(
httpResponse.getStatusCode()); HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
int status = hr.getStatusCode();
switch (status) {
case HttpServletResponse.SC_BAD_REQUEST:
case 422: // Swift returns 422 Unprocessable Entity
sendS3Exception(request, response,
new S3Exception(S3ErrorCode.BAD_DIGEST));
break;
default:
// TODO: emit hre.getContent() ?
response.sendError(status);
break;
}
baseRequest.setHandled(true); baseRequest.setHandled(true);
return; return;
} catch (IllegalArgumentException iae) { } catch (IllegalArgumentException iae) {
@ -86,8 +107,7 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
baseRequest.setHandled(true); baseRequest.setHandled(true);
return; return;
} catch (S3Exception se) { } catch (S3Exception se) {
handler.sendSimpleErrorResponse(request, response, sendS3Exception(request, response, se);
se.getError(), se.getMessage(), se.getElements());
baseRequest.setHandled(true); baseRequest.setHandled(true);
return; return;
} catch (UnsupportedOperationException uoe) { } catch (UnsupportedOperationException uoe) {