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
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user