diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-10-15 10:52:17 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-10-15 10:52:20 -0700 |
| commit | ace0ea3d28a7102dee0a0a0c78ffd30d6e068b67 (patch) | |
| tree | 1bb85175bd785f2c0643a5cc6bf5693cf7236446 /weed/s3api | |
| parent | 53207ae0e76b30fa9d9d1df04eba276774cbe141 (diff) | |
| download | seaweedfs-ace0ea3d28a7102dee0a0a0c78ffd30d6e068b67.tar.xz seaweedfs-ace0ea3d28a7102dee0a0a0c78ffd30d6e068b67.zip | |
s3: avoid duplicated bucket
Diffstat (limited to 'weed/s3api')
| -rw-r--r-- | weed/s3api/s3api_bucket_handlers.go | 28 |
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 } |
