From b603abefc885873b974ce9c51974adf620b1d815 Mon Sep 17 00:00:00 2001 From: Andrew Gaul Date: Tue, 29 Jul 2014 08:15:40 -0700 Subject: [PATCH] Emit NoSuchKey when reading non-existent object Found with Ceph s3-tests. References #5. --- .../java/org/gaul/s3proxy/S3ProxyHandler.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java index 88db900..4acdce1 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java @@ -129,10 +129,7 @@ final class S3ProxyHandler extends AbstractHandler { return; } else { String[] path = uri.split("/", 3); - errorCode = handleGetBlob(request, response, path[1], path[2]); - if (errorCode != HttpServletResponse.SC_OK) { - response.sendError(errorCode); - } + handleGetBlob(request, response, path[1], path[2]); baseRequest.setHandled(true); return; } @@ -443,9 +440,9 @@ final class S3ProxyHandler extends AbstractHandler { addMetadataToResponse(response, metadata); } - private int handleGetBlob(HttpServletRequest request, + private void handleGetBlob(HttpServletRequest request, HttpServletResponse response, String containerName, - String blobName) { + String blobName) throws IOException { GetOptions options = new GetOptions(); String range = request.getHeader(HttpHeaders.RANGE); if (range != null && range.startsWith("bytes=") @@ -459,7 +456,10 @@ final class S3ProxyHandler extends AbstractHandler { Blob blob = blobStore.getBlob(containerName, blobName, options); if (blob == null) { - return HttpServletResponse.SC_NOT_FOUND; + sendSimpleErrorResponse(response, + HttpServletResponse.SC_NOT_FOUND, "NoSuchKey", + "Not Found", Optional.absent()); + return; } response.setStatus(HttpServletResponse.SC_OK); @@ -470,10 +470,9 @@ final class S3ProxyHandler extends AbstractHandler { os.flush(); } catch (IOException ioe) { logger.error("Error writing to client: {}", ioe.getMessage()); - return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return; } - - return HttpServletResponse.SC_OK; } private void handlePutBlob(HttpServletRequest request,