Browse Source

ensure owner

pull/7549/head
chrislu 1 week ago
parent
commit
c19e2f6b85
  1. 16
      weed/s3api/s3api_bucket_handlers.go

16
weed/s3api/s3api_bucket_handlers.go

@ -593,6 +593,22 @@ func (s3a *S3ApiServer) autoCreateBucket(r *http.Request, bucket string) error {
if exist, err2 := s3a.exists(s3a.option.BucketsPath, bucket, true); err2 != nil {
glog.Warningf("autoCreateBucket: failed to check existence for bucket %s: %v", bucket, err2)
} else if exist {
// The bucket exists, which is fine. However, we should ensure it has an owner.
// If it was created by a concurrent request that didn't set an owner,
// we'll set it here to ensure consistency.
if entry, getErr := s3a.getEntry(s3a.option.BucketsPath, bucket); getErr == nil {
if entry.Extended == nil || len(entry.Extended[s3_constants.AmzIdentityId]) == 0 {
// No owner set, assign current admin as owner
setBucketOwner(r)(entry)
if updateErr := s3a.updateEntry(s3a.option.BucketsPath, entry); updateErr != nil {
glog.Warningf("autoCreateBucket: failed to set owner for existing bucket %s: %v", bucket, updateErr)
} else {
glog.V(1).Infof("Set owner for existing bucket %s (created by concurrent request)", bucket)
}
}
} else {
glog.Warningf("autoCreateBucket: failed to get entry for existing bucket %s: %v", bucket, getErr)
}
return nil
}
return fmt.Errorf("failed to auto-create bucket %s: %w", bucket, err)

Loading…
Cancel
Save