diff --git a/weed/s3api/s3api_bucket_handlers.go b/weed/s3api/s3api_bucket_handlers.go index 3d35e5216..fe6739b35 100644 --- a/weed/s3api/s3api_bucket_handlers.go +++ b/weed/s3api/s3api_bucket_handlers.go @@ -148,6 +148,13 @@ func (s3a *S3ApiServer) DeleteBucketHandler(w http.ResponseWriter, r *http.Reque } err := s3a.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error { + isEmpty, err := s3a.isDirectoryAllEmpty(client, s3a.option.BucketsPath, bucket) + if err != nil { + return fmt.Errorf("check empty bucket %s: %v", bucket, err) + } + if !isEmpty { + return fmt.Errorf("BucketNotEmpty") + } // delete collection deleteCollectionRequest := &filer_pb.DeleteCollectionRequest{ @@ -162,6 +169,15 @@ func (s3a *S3ApiServer) DeleteBucketHandler(w http.ResponseWriter, r *http.Reque return nil }) + if err != nil { + s3ErrorCode := s3err.ErrInternalError + if err.Error() == "BucketNotEmpty" { + s3ErrorCode = s3err.ErrBucketNotEmpty + } + writeErrorResponse(w, s3ErrorCode, r.URL) + return + } + err = s3a.rm(s3a.option.BucketsPath, bucket, false, true) if err != nil {