Merge pull request #1362 from KamiPasi/patch-1

🔧 refactor(user_usable_group): enhance concurrency control with mutex…
This commit is contained in:
Calcium-Ion
2025-07-18 20:53:29 +08:00
committed by GitHub

View File

@@ -3,14 +3,19 @@ package setting
import ( import (
"encoding/json" "encoding/json"
"one-api/common" "one-api/common"
"sync"
) )
var userUsableGroups = map[string]string{ var userUsableGroups = map[string]string{
"default": "默认分组", "default": "默认分组",
"vip": "vip分组", "vip": "vip分组",
} }
var userUsableGroupsMutex sync.RWMutex
func GetUserUsableGroupsCopy() map[string]string { func GetUserUsableGroupsCopy() map[string]string {
userUsableGroupsMutex.RLock()
defer userUsableGroupsMutex.RUnlock()
copyUserUsableGroups := make(map[string]string) copyUserUsableGroups := make(map[string]string)
for k, v := range userUsableGroups { for k, v := range userUsableGroups {
copyUserUsableGroups[k] = v copyUserUsableGroups[k] = v
@@ -19,6 +24,9 @@ func GetUserUsableGroupsCopy() map[string]string {
} }
func UserUsableGroups2JSONString() string { func UserUsableGroups2JSONString() string {
userUsableGroupsMutex.RLock()
defer userUsableGroupsMutex.RUnlock()
jsonBytes, err := json.Marshal(userUsableGroups) jsonBytes, err := json.Marshal(userUsableGroups)
if err != nil { if err != nil {
common.SysError("error marshalling user groups: " + err.Error()) common.SysError("error marshalling user groups: " + err.Error())
@@ -27,6 +35,9 @@ func UserUsableGroups2JSONString() string {
} }
func UpdateUserUsableGroupsByJSONString(jsonStr string) error { func UpdateUserUsableGroupsByJSONString(jsonStr string) error {
userUsableGroupsMutex.Lock()
defer userUsableGroupsMutex.Unlock()
userUsableGroups = make(map[string]string) userUsableGroups = make(map[string]string)
return json.Unmarshal([]byte(jsonStr), &userUsableGroups) return json.Unmarshal([]byte(jsonStr), &userUsableGroups)
} }
@@ -47,11 +58,17 @@ func GetUserUsableGroups(userGroup string) map[string]string {
} }
func GroupInUserUsableGroups(groupName string) bool { func GroupInUserUsableGroups(groupName string) bool {
userUsableGroupsMutex.RLock()
defer userUsableGroupsMutex.RUnlock()
_, ok := userUsableGroups[groupName] _, ok := userUsableGroups[groupName]
return ok return ok
} }
func GetUsableGroupDescription(groupName string) string { func GetUsableGroupDescription(groupName string) string {
userUsableGroupsMutex.RLock()
defer userUsableGroupsMutex.RUnlock()
if desc, ok := userUsableGroups[groupName]; ok { if desc, ok := userUsableGroups[groupName]; ok {
return desc return desc
} }