diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2025-11-10 20:30:21 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-10 20:30:21 -0800 |
| commit | bf8e4f40e60e74ce03c2f497c6245e5d1460f1d3 (patch) | |
| tree | eb42645861f4457411259e86f915cfa514cb192f /weed/s3api/s3api_bucket_handlers.go | |
| parent | 6201cd099e55e4317f4a34291800a31c145bb803 (diff) | |
| download | seaweedfs-bf8e4f40e60e74ce03c2f497c6245e5d1460f1d3.tar.xz seaweedfs-bf8e4f40e60e74ce03c2f497c6245e5d1460f1d3.zip | |
S3: Perf related (#7463)
* reduce checks
* s3 object lookup optimization
* Only check versioning configuration if client requests
* Consolidate SSE Entry Lookups
* optimize
* revert optimization for versioned objects
* Removed: getObjectEntryForSSE() function
* refactor
* Refactoring: Added fetchObjectEntryRequired
* avoid refetching
* return early if not found
* reuse objects from conditional check
* clear cache when creating bucket
Diffstat (limited to 'weed/s3api/s3api_bucket_handlers.go')
| -rw-r--r-- | weed/s3api/s3api_bucket_handlers.go | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/weed/s3api/s3api_bucket_handlers.go b/weed/s3api/s3api_bucket_handlers.go index 9509219d9..80d29547b 100644 --- a/weed/s3api/s3api_bucket_handlers.go +++ b/weed/s3api/s3api_bucket_handlers.go @@ -7,7 +7,6 @@ import ( "encoding/xml" "errors" "fmt" - "github.com/seaweedfs/seaweedfs/weed/util" "math" "net/http" "path" @@ -16,6 +15,8 @@ import ( "strings" "time" + "github.com/seaweedfs/seaweedfs/weed/util" + "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" "github.com/seaweedfs/seaweedfs/weed/s3api/s3bucket" @@ -210,6 +211,11 @@ func (s3a *S3ApiServer) PutBucketHandler(w http.ResponseWriter, r *http.Request) return } + // Remove bucket from negative cache after successful creation + if s3a.bucketConfigCache != nil { + s3a.bucketConfigCache.RemoveNegativeCache(bucket) + } + // Check for x-amz-bucket-object-lock-enabled header (S3 standard compliance) if objectLockHeaderValue := r.Header.Get(s3_constants.AmzBucketObjectLockEnabled); strings.EqualFold(objectLockHeaderValue, "true") { glog.V(3).Infof("PutBucketHandler: enabling Object Lock and Versioning for bucket %s due to x-amz-bucket-object-lock-enabled header", bucket) @@ -493,16 +499,17 @@ func (s3a *S3ApiServer) HeadBucketHandler(w http.ResponseWriter, r *http.Request } func (s3a *S3ApiServer) checkBucket(r *http.Request, bucket string) s3err.ErrorCode { - entry, err := s3a.getEntry(s3a.option.BucketsPath, bucket) - if entry == nil || errors.Is(err, filer_pb.ErrNotFound) { - return s3err.ErrNoSuchBucket + // Use cached bucket config instead of direct getEntry call (optimization) + config, errCode := s3a.getBucketConfig(bucket) + if errCode != s3err.ErrNone { + return errCode } //if iam is enabled, the access was already checked before if s3a.iam.isEnabled() { return s3err.ErrNone } - if !s3a.hasAccess(r, entry) { + if !s3a.hasAccess(r, config.Entry) { return s3err.ErrAccessDenied } return s3err.ErrNone |
