Browse Source

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
pull/8147/head
Chris Lu 3 days ago
parent
commit
1b9c8b8614
  1. 59
      weed/s3api/s3api_tables.go

59
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
}
Loading…
Cancel
Save