kopia lustrzana https://github.com/gaul/s3proxy
Handle HttpResponseException in S3ProxyHandlerJetty
rodzic
525c6e2275
commit
e23e9b78e4
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Ładowanie…
Reference in New Issue