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.PutOptions;
import org.jclouds.domain.Location;
import org.jclouds.http.HttpResponse;
import org.jclouds.http.HttpResponseException;
import org.jclouds.io.ContentMetadata;
import org.jclouds.io.ContentMetadataBuilder;
import org.jclouds.io.Payload;
@ -1706,37 +1704,19 @@ public class S3ProxyHandler {
}
String eTag;
try {
BlobBuilder.PayloadBlobBuilder builder = blobStore
.blobBuilder(blobName)
.payload(is)
.contentLength(contentLength);
BlobBuilder.PayloadBlobBuilder builder = blobStore
.blobBuilder(blobName)
.payload(is)
.contentLength(contentLength);
addContentMetdataFromHttpRequest(builder, request);
if (contentMD5 != null) {
builder = builder.contentMD5(contentMD5);
}
eTag = blobStore.putBlob(containerName, builder.build(),
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;
addContentMetdataFromHttpRequest(builder, request);
if (contentMD5 != null) {
builder = builder.contentMD5(contentMD5);
}
eTag = blobStore.putBlob(containerName, builder.build(),
options);
response.addHeader(HttpHeaders.ETAG, maybeQuoteETag(eTag));
}

Wyświetl plik

@ -50,6 +50,13 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
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
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
@ -69,10 +76,24 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
baseRequest.setHandled(true);
return;
} catch (HttpResponseException hre) {
HttpResponse httpResponse = hre.getResponse();
response.sendError(httpResponse == null ?
HttpServletResponse.SC_INTERNAL_SERVER_ERROR :
httpResponse.getStatusCode());
HttpResponse hr = hre.getResponse();
if (hr == null) {
response.sendError(
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);
return;
} catch (IllegalArgumentException iae) {
@ -86,8 +107,7 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
baseRequest.setHandled(true);
return;
} catch (S3Exception se) {
handler.sendSimpleErrorResponse(request, response,
se.getError(), se.getMessage(), se.getElements());
sendS3Exception(request, response, se);
baseRequest.setHandled(true);
return;
} catch (UnsupportedOperationException uoe) {