aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2022-03-30 21:09:06 -0700
committerGitHub <noreply@github.com>2022-03-30 21:09:06 -0700
commit7f4e33ec1574f862ed8fd238e808ae471667dfb7 (patch)
tree9c4cde522bd418c7bb95f7bb610b32ead247d25f /weed/s3api
parentf08d67eeb72f621998c5d91ac2a9de89f8417e68 (diff)
parent691ed5095785dc43f0b4ac7c9d9d78111518f253 (diff)
downloadseaweedfs-7f4e33ec1574f862ed8fd238e808ae471667dfb7.tar.xz
seaweedfs-7f4e33ec1574f862ed8fd238e808ae471667dfb7.zip
Merge pull request #2083 from kmlebedev/s3BucketNotEmpty
s3 test bucket delete nonempty
Diffstat (limited to 'weed/s3api')
-rw-r--r--weed/s3api/s3api_bucket_handlers.go19
-rw-r--r--weed/s3api/s3api_server.go17
2 files changed, 28 insertions, 8 deletions
diff --git a/weed/s3api/s3api_bucket_handlers.go b/weed/s3api/s3api_bucket_handlers.go
index 3d35e5216..b8f2c2f7a 100644
--- a/weed/s3api/s3api_bucket_handlers.go
+++ b/weed/s3api/s3api_bucket_handlers.go
@@ -3,6 +3,7 @@ package s3api
import (
"context"
"encoding/xml"
+ "errors"
"fmt"
"math"
"net/http"
@@ -148,6 +149,15 @@ func (s3a *S3ApiServer) DeleteBucketHandler(w http.ResponseWriter, r *http.Reque
}
err := s3a.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error {
+ if !s3a.option.AllowDeleteBucketNotEmpty {
+ entries, _, err := s3a.list(s3a.option.BucketsPath+"/"+bucket, "", "", false, 1)
+ if err != nil {
+ return fmt.Errorf("failed to list bucket %s: %v", bucket, err)
+ }
+ if len(entries) > 0 {
+ return errors.New(s3err.GetAPIError(s3err.ErrBucketNotEmpty).Code)
+ }
+ }
// delete collection
deleteCollectionRequest := &filer_pb.DeleteCollectionRequest{
@@ -162,6 +172,15 @@ func (s3a *S3ApiServer) DeleteBucketHandler(w http.ResponseWriter, r *http.Reque
return nil
})
+ if err != nil {
+ s3ErrorCode := s3err.ErrInternalError
+ if err.Error() == s3err.GetAPIError(s3err.ErrBucketNotEmpty).Code {
+ s3ErrorCode = s3err.ErrBucketNotEmpty
+ }
+ s3err.WriteErrorResponse(w, r, s3ErrorCode)
+ return
+ }
+
err = s3a.rm(s3a.option.BucketsPath, bucket, false, true)
if err != nil {
diff --git a/weed/s3api/s3api_server.go b/weed/s3api/s3api_server.go
index fe069595d..561edd924 100644
--- a/weed/s3api/s3api_server.go
+++ b/weed/s3api/s3api_server.go
@@ -19,14 +19,15 @@ import (
)
type S3ApiServerOption struct {
- Filer pb.ServerAddress
- Port int
- Config string
- DomainName string
- BucketsPath string
- GrpcDialOption grpc.DialOption
- AllowEmptyFolder bool
- LocalFilerSocket *string
+ Filer pb.ServerAddress
+ Port int
+ Config string
+ DomainName string
+ BucketsPath string
+ GrpcDialOption grpc.DialOption
+ AllowEmptyFolder bool
+ AllowDeleteBucketNotEmpty bool
+ LocalFilerSocket *string
}
type S3ApiServer struct {