From c19e2f6b85baac8470fee4f475bff45c3447cdee Mon Sep 17 00:00:00 2001 From: chrislu Date: Tue, 25 Nov 2025 15:01:36 -0800 Subject: [PATCH] ensure owner --- weed/s3api/s3api_bucket_handlers.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/weed/s3api/s3api_bucket_handlers.go b/weed/s3api/s3api_bucket_handlers.go index 561ebeec1..0600b043d 100644 --- a/weed/s3api/s3api_bucket_handlers.go +++ b/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)