Emit NoSuchBucket/BucketNotEmpty on bucket delete

Found with Ceph s3-tests.  References #5.
pull/16/head
Andrew Gaul 2014-07-31 00:53:26 -07:00
rodzic 1e7a4a2270
commit 4c99f6870f
1 zmienionych plików z 15 dodań i 15 usunięć

Wyświetl plik

@ -113,11 +113,8 @@ final class S3ProxyHandler extends AbstractHandler {
switch (method) { switch (method) {
case "DELETE": case "DELETE":
if (uri.lastIndexOf("/") == 0) { if (path.length <= 2 || path[2].isEmpty()) {
errorCode = handleContainerDelete(uri.substring(1)); handleContainerDelete(response, path[1]);
if (errorCode != HttpServletResponse.SC_OK) {
response.sendError(errorCode);
}
baseRequest.setHandled(true); baseRequest.setHandled(true);
return; return;
} else { } else {
@ -291,16 +288,19 @@ final class S3ProxyHandler extends AbstractHandler {
} }
} }
private int handleContainerDelete(String containerName) { private void handleContainerDelete(HttpServletResponse response,
try { String containerName) {
return blobStore.deleteContainerIfEmpty(containerName) if (!blobStore.containerExists(containerName)) {
? HttpServletResponse.SC_OK sendSimpleErrorResponse(response,
// TODO: emit BucketNotEmpty error code? HttpServletResponse.SC_NOT_FOUND, "NoSuchBucket",
: HttpServletResponse.SC_CONFLICT; "Not Found");
} catch (RuntimeException re) { return;
logger.error("Error deleting container {}: {}", containerName, }
re.getMessage()); if (!blobStore.deleteContainerIfEmpty(containerName)) {
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; sendSimpleErrorResponse(response,
HttpServletResponse.SC_CONFLICT, "BucketNotEmpty",
"Conflict");
return;
} }
} }