kopia lustrzana https://github.com/gaul/s3proxy
Emit NoSuchBucket/BucketNotEmpty on bucket delete
Found with Ceph s3-tests. References #5.pull/16/head
rodzic
1e7a4a2270
commit
4c99f6870f
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue