diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2022-03-30 21:09:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-30 21:09:06 -0700 |
| commit | 7f4e33ec1574f862ed8fd238e808ae471667dfb7 (patch) | |
| tree | 9c4cde522bd418c7bb95f7bb610b32ead247d25f /weed/s3api | |
| parent | f08d67eeb72f621998c5d91ac2a9de89f8417e68 (diff) | |
| parent | 691ed5095785dc43f0b4ac7c9d9d78111518f253 (diff) | |
| download | seaweedfs-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.go | 19 | ||||
| -rw-r--r-- | weed/s3api/s3api_server.go | 17 |
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 { |
