From 16d75966356676b0e643ec0b73e6f6c87191e91f Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 9 Jan 2023 10:04:44 +0800 Subject: [PATCH] Fix set system setting failure once it cached (#22334) backport #22333 --- models/system/setting.go | 27 +++++++++++++++------------ models/system/setting_test.go | 6 +++++- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/models/system/setting.go b/models/system/setting.go index c801f9cc1c..9b9d0f34b3 100644 --- a/models/system/setting.go +++ b/models/system/setting.go @@ -13,7 +13,7 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/cache" - "code.gitea.io/gitea/modules/setting" + setting_module "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" "strk.kbt.io/projects/go/libravatar" @@ -89,7 +89,7 @@ func GetSettingNoCache(key string) (*Setting, error) { if len(v) == 0 { return nil, ErrSettingIsNotExist{key} } - return v[key], nil + return v[strings.ToLower(key)], nil } // GetSetting returns the setting value via the key @@ -132,7 +132,7 @@ func GetSettings(keys []string) (map[string]*Setting, error) { type AllSettings map[string]*Setting func (settings AllSettings) Get(key string) Setting { - if v, ok := settings[key]; ok { + if v, ok := settings[strings.ToLower(key)]; ok { return *v } return Setting{} @@ -185,14 +185,17 @@ func SetSettingNoVersion(key, value string) error { // SetSetting updates a users' setting for a specific key func SetSetting(setting *Setting) error { - _, err := cache.GetString(genSettingCacheKey(setting.SettingKey), func() (string, error) { - return setting.SettingValue, upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version) - }) - if err != nil { + if err := upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version); err != nil { return err } setting.Version++ + + cc := cache.GetCache() + if cc != nil { + return cc.Put(genSettingCacheKey(setting.SettingKey), setting.SettingValue, setting_module.CacheService.TTLSeconds()) + } + return nil } @@ -244,7 +247,7 @@ func Init() error { var disableGravatar bool disableGravatarSetting, err := GetSettingNoCache(KeyPictureDisableGravatar) if IsErrSettingIsNotExist(err) { - disableGravatar = setting.GetDefaultDisableGravatar() + disableGravatar = setting_module.GetDefaultDisableGravatar() disableGravatarSetting = &Setting{SettingValue: strconv.FormatBool(disableGravatar)} } else if err != nil { return err @@ -255,7 +258,7 @@ func Init() error { var enableFederatedAvatar bool enableFederatedAvatarSetting, err := GetSettingNoCache(KeyPictureEnableFederatedAvatar) if IsErrSettingIsNotExist(err) { - enableFederatedAvatar = setting.GetDefaultEnableFederatedAvatar(disableGravatar) + enableFederatedAvatar = setting_module.GetDefaultEnableFederatedAvatar(disableGravatar) enableFederatedAvatarSetting = &Setting{SettingValue: strconv.FormatBool(enableFederatedAvatar)} } else if err != nil { return err @@ -263,16 +266,16 @@ func Init() error { enableFederatedAvatar = disableGravatarSetting.GetValueBool() } - if setting.OfflineMode { + if setting_module.OfflineMode { disableGravatar = true enableFederatedAvatar = false } if enableFederatedAvatar || !disableGravatar { var err error - GravatarSourceURL, err = url.Parse(setting.GravatarSource) + GravatarSourceURL, err = url.Parse(setting_module.GravatarSource) if err != nil { - return fmt.Errorf("Failed to parse Gravatar URL(%s): %w", setting.GravatarSource, err) + return fmt.Errorf("Failed to parse Gravatar URL(%s): %w", setting_module.GravatarSource, err) } } diff --git a/models/system/setting_test.go b/models/system/setting_test.go index d25fc05f31..ecfefeb097 100644 --- a/models/system/setting_test.go +++ b/models/system/setting_test.go @@ -34,10 +34,14 @@ func TestSettings(t *testing.T) { assert.EqualValues(t, newSetting.SettingValue, settings[strings.ToLower(keyName)].SettingValue) // updated setting - updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: newSetting.Version} + updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: settings[strings.ToLower(keyName)].Version} err = system.SetSetting(updatedSetting) assert.NoError(t, err) + value, err := system.GetSetting(keyName) + assert.NoError(t, err) + assert.EqualValues(t, updatedSetting.SettingValue, value) + // get all settings settings, err = system.GetAllSettings() assert.NoError(t, err)