aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-10-15 10:52:17 -0700
committerChris Lu <chris.lu@gmail.com>2020-10-15 10:52:20 -0700
commitace0ea3d28a7102dee0a0a0c78ffd30d6e068b67 (patch)
tree1bb85175bd785f2c0643a5cc6bf5693cf7236446 /weed/s3api
parent53207ae0e76b30fa9d9d1df04eba276774cbe141 (diff)
downloadseaweedfs-ace0ea3d28a7102dee0a0a0c78ffd30d6e068b67.tar.xz
seaweedfs-ace0ea3d28a7102dee0a0a0c78ffd30d6e068b67.zip
s3: avoid duplicated bucket
Diffstat (limited to 'weed/s3api')
-rw-r--r--weed/s3api/s3api_bucket_handlers.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/weed/s3api/s3api_bucket_handlers.go b/weed/s3api/s3api_bucket_handlers.go
index 848ed941c..d8f4812ea 100644
--- a/weed/s3api/s3api_bucket_handlers.go
+++ b/weed/s3api/s3api_bucket_handlers.go
@@ -58,8 +58,36 @@ func (s3a *S3ApiServer) PutBucketHandler(w http.ResponseWriter, r *http.Request)
bucket, _ := getBucketAndObject(r)
+ // avoid duplicated buckets
+ errCode := s3err.ErrNone
+ if err := s3a.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
+ if resp, err := client.CollectionList(context.Background(), &filer_pb.CollectionListRequest{
+ IncludeEcVolumes: true,
+ IncludeNormalVolumes: true,
+ }); err != nil {
+ glog.Errorf("list collection: %v", err)
+ return fmt.Errorf("list collections: %v", err)
+ }else {
+ for _, c := range resp.Collections {
+ if bucket == c.Name {
+ errCode = s3err.ErrBucketAlreadyExists
+ break
+ }
+ }
+ }
+ return nil
+ }); err != nil {
+ writeErrorResponse(w, s3err.ErrInternalError, r.URL)
+ return
+ }
+ if errCode != s3err.ErrNone {
+ writeErrorResponse(w, errCode, r.URL)
+ return
+ }
+
// create the folder for bucket, but lazily create actual collection
if err := s3a.mkdir(s3a.option.BucketsPath, bucket, nil); err != nil {
+ glog.Errorf("PutBucketHandler mkdir: %v", err)
writeErrorResponse(w, s3err.ErrInternalError, r.URL)
return
}