Fix #22281 In #21621 , `Get[V]` and `Set[V]` has been introduced, so that cache value will be `*Setting`. For memory cache it's OK. But for redis cache, it can only store `string` for the current implementation. This PR revert some of changes of that and just store or return a `string` for system setting.tags/v1.19.0-rc0
@@ -153,8 +153,7 @@ func generateEmailAvatarLink(email string, size int, final bool) string { | |||
return DefaultAvatarLink() | |||
} | |||
enableFederatedAvatarSetting, _ := system_model.GetSetting(system_model.KeyPictureEnableFederatedAvatar) | |||
enableFederatedAvatar := enableFederatedAvatarSetting.GetValueBool() | |||
enableFederatedAvatar := system_model.GetSettingBool(system_model.KeyPictureEnableFederatedAvatar) | |||
var err error | |||
if enableFederatedAvatar && system_model.LibravatarService != nil { | |||
@@ -175,9 +174,7 @@ func generateEmailAvatarLink(email string, size int, final bool) string { | |||
return urlStr | |||
} | |||
disableGravatarSetting, _ := system_model.GetSetting(system_model.KeyPictureDisableGravatar) | |||
disableGravatar := disableGravatarSetting.GetValueBool() | |||
disableGravatar := system_model.GetSettingBool(system_model.KeyPictureDisableGravatar) | |||
if !disableGravatar { | |||
// copy GravatarSourceURL, because we will modify its Path. | |||
avatarURLCopy := *system_model.GravatarSourceURL |
@@ -92,13 +92,13 @@ func GetSettingNoCache(key string) (*Setting, error) { | |||
} | |||
// GetSetting returns the setting value via the key | |||
func GetSetting(key string) (*Setting, error) { | |||
return cache.Get(genSettingCacheKey(key), func() (*Setting, error) { | |||
func GetSetting(key string) (string, error) { | |||
return cache.GetString(genSettingCacheKey(key), func() (string, error) { | |||
res, err := GetSettingNoCache(key) | |||
if err != nil { | |||
return nil, err | |||
return "", err | |||
} | |||
return res, nil | |||
return res.SettingValue, nil | |||
}) | |||
} | |||
@@ -106,7 +106,8 @@ func GetSetting(key string) (*Setting, error) { | |||
// none existing keys and errors are ignored and result in false | |||
func GetSettingBool(key string) bool { | |||
s, _ := GetSetting(key) | |||
return s.GetValueBool() | |||
v, _ := strconv.ParseBool(s) | |||
return v | |||
} | |||
// GetSettings returns specific settings | |||
@@ -183,8 +184,8 @@ func SetSettingNoVersion(key, value string) error { | |||
// SetSetting updates a users' setting for a specific key | |||
func SetSetting(setting *Setting) error { | |||
_, err := cache.Set(genSettingCacheKey(setting.SettingKey), func() (*Setting, error) { | |||
return setting, upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version) | |||
_, err := cache.GetString(genSettingCacheKey(setting.SettingKey), func() (string, error) { | |||
return setting.SettingValue, upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version) | |||
}) | |||
if err != nil { | |||
return err |
@@ -67,9 +67,7 @@ func (u *User) AvatarLinkWithSize(size int) string { | |||
useLocalAvatar := false | |||
autoGenerateAvatar := false | |||
disableGravatarSetting, _ := system_model.GetSetting(system_model.KeyPictureDisableGravatar) | |||
disableGravatar := disableGravatarSetting.GetValueBool() | |||
disableGravatar := system_model.GetSettingBool(system_model.KeyPictureDisableGravatar) | |||
switch { | |||
case u.UseCustomAvatar: |
@@ -53,13 +53,13 @@ func genSettingCacheKey(userID int64, key string) string { | |||
} | |||
// GetSetting returns the setting value via the key | |||
func GetSetting(uid int64, key string) (*Setting, error) { | |||
return cache.Get(genSettingCacheKey(uid, key), func() (*Setting, error) { | |||
func GetSetting(uid int64, key string) (string, error) { | |||
return cache.GetString(genSettingCacheKey(uid, key), func() (string, error) { | |||
res, err := GetSettingNoCache(uid, key) | |||
if err != nil { | |||
return nil, err | |||
return "", err | |||
} | |||
return res, nil | |||
return res.SettingValue, nil | |||
}) | |||
} | |||
@@ -154,7 +154,7 @@ func SetUserSetting(userID int64, key, value string) error { | |||
return err | |||
} | |||
_, err := cache.Set(genSettingCacheKey(userID, key), func() (string, error) { | |||
_, err := cache.GetString(genSettingCacheKey(userID, key), func() (string, error) { | |||
return value, upsertUserSettingValue(userID, key, value) | |||
}) | |||
@@ -45,39 +45,6 @@ func GetCache() mc.Cache { | |||
return conn | |||
} | |||
// Get returns the key value from cache with callback when no key exists in cache | |||
func Get[V interface{}](key string, getFunc func() (V, error)) (V, error) { | |||
if conn == nil || setting.CacheService.TTL == 0 { | |||
return getFunc() | |||
} | |||
cached := conn.Get(key) | |||
if value, ok := cached.(V); ok { | |||
return value, nil | |||
} | |||
value, err := getFunc() | |||
if err != nil { | |||
return value, err | |||
} | |||
return value, conn.Put(key, value, setting.CacheService.TTLSeconds()) | |||
} | |||
// Set updates and returns the key value in the cache with callback. The old value is only removed if the updateFunc() is successful | |||
func Set[V interface{}](key string, valueFunc func() (V, error)) (V, error) { | |||
if conn == nil || setting.CacheService.TTL == 0 { | |||
return valueFunc() | |||
} | |||
value, err := valueFunc() | |||
if err != nil { | |||
return value, err | |||
} | |||
return value, conn.Put(key, value, setting.CacheService.TTLSeconds()) | |||
} | |||
// GetString returns the key value from cache with callback when no key exists in cache | |||
func GetString(key string, getFunc func() (string, error)) (string, error) { | |||
if conn == nil || setting.CacheService.TTL == 0 { |