From 1b9c8b8614b17da1fc56b76de087a9b262255d87 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 28 Jan 2026 01:14:31 -0800 Subject: [PATCH] s3api_tables: optimize action validation with map lookup - Replace O(n) slice iteration with O(1) map lookup - Move s3TablesActionsMap to package level - Avoid recreating the map on every function call - Improves performance for request validation --- weed/s3api/s3api_tables.go | 59 ++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/weed/s3api/s3api_tables.go b/weed/s3api/s3api_tables.go index 0358a532a..0c420be27 100644 --- a/weed/s3api/s3api_tables.go +++ b/weed/s3api/s3api_tables.go @@ -12,6 +12,31 @@ import ( "github.com/seaweedfs/seaweedfs/weed/s3api/s3tables" ) +// s3TablesActionsMap contains all valid S3 Tables operations for O(1) lookup +var s3TablesActionsMap = map[string]struct{}{ + "CreateTableBucket": {}, + "GetTableBucket": {}, + "ListTableBuckets": {}, + "DeleteTableBucket": {}, + "PutTableBucketPolicy": {}, + "GetTableBucketPolicy": {}, + "DeleteTableBucketPolicy": {}, + "CreateNamespace": {}, + "GetNamespace": {}, + "ListNamespaces": {}, + "DeleteNamespace": {}, + "CreateTable": {}, + "GetTable": {}, + "ListTables": {}, + "DeleteTable": {}, + "PutTablePolicy": {}, + "GetTablePolicy": {}, + "DeleteTablePolicy": {}, + "TagResource": {}, + "ListTagsForResource": {}, + "UntagResource": {}, +} + // S3TablesApiServer wraps the S3 Tables handler with S3ApiServer's filer access type S3TablesApiServer struct { s3a *S3ApiServer @@ -87,36 +112,8 @@ func (s3a *S3ApiServer) registerS3TablesRoutes(router *mux.Router) { glog.V(1).Infof("S3 Tables API enabled") } -// isS3TablesAction checks if the action is an S3 Tables operation +// isS3TablesAction checks if the action is an S3 Tables operation using O(1) map lookup func isS3TablesAction(action string) bool { - s3TablesActions := []string{ - "CreateTableBucket", - "GetTableBucket", - "ListTableBuckets", - "DeleteTableBucket", - "PutTableBucketPolicy", - "GetTableBucketPolicy", - "DeleteTableBucketPolicy", - "CreateNamespace", - "GetNamespace", - "ListNamespaces", - "DeleteNamespace", - "CreateTable", - "GetTable", - "ListTables", - "DeleteTable", - "PutTablePolicy", - "GetTablePolicy", - "DeleteTablePolicy", - "TagResource", - "ListTagsForResource", - "UntagResource", - } - - for _, a := range s3TablesActions { - if a == action { - return true - } - } - return false + _, ok := s3TablesActionsMap[action] + return ok }