Skip to content

Commit dfd2db5

Browse files
authored
Fix set system setting failure once it cached (#22333)
Unfortunately, #22295 introduced a bug that when set a cached system setting, it will not affect. This PR make sure to remove the cache key when updating a system setting. Fix #22332
1 parent bdf8c80 commit dfd2db5

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

Diff for: models/system/setting.go

+15-12
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
"code.gitea.io/gitea/models/db"
1414
"code.gitea.io/gitea/modules/cache"
15-
"code.gitea.io/gitea/modules/setting"
15+
setting_module "code.gitea.io/gitea/modules/setting"
1616
"code.gitea.io/gitea/modules/timeutil"
1717

1818
"strk.kbt.io/projects/go/libravatar"
@@ -88,7 +88,7 @@ func GetSettingNoCache(key string) (*Setting, error) {
8888
if len(v) == 0 {
8989
return nil, ErrSettingIsNotExist{key}
9090
}
91-
return v[key], nil
91+
return v[strings.ToLower(key)], nil
9292
}
9393

9494
// GetSetting returns the setting value via the key
@@ -131,7 +131,7 @@ func GetSettings(keys []string) (map[string]*Setting, error) {
131131
type AllSettings map[string]*Setting
132132

133133
func (settings AllSettings) Get(key string) Setting {
134-
if v, ok := settings[key]; ok {
134+
if v, ok := settings[strings.ToLower(key)]; ok {
135135
return *v
136136
}
137137
return Setting{}
@@ -184,14 +184,17 @@ func SetSettingNoVersion(key, value string) error {
184184

185185
// SetSetting updates a users' setting for a specific key
186186
func SetSetting(setting *Setting) error {
187-
_, err := cache.GetString(genSettingCacheKey(setting.SettingKey), func() (string, error) {
188-
return setting.SettingValue, upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version)
189-
})
190-
if err != nil {
187+
if err := upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version); err != nil {
191188
return err
192189
}
193190

194191
setting.Version++
192+
193+
cc := cache.GetCache()
194+
if cc != nil {
195+
return cc.Put(genSettingCacheKey(setting.SettingKey), setting.SettingValue, setting_module.CacheService.TTLSeconds())
196+
}
197+
195198
return nil
196199
}
197200

@@ -243,7 +246,7 @@ func Init() error {
243246
var disableGravatar bool
244247
disableGravatarSetting, err := GetSettingNoCache(KeyPictureDisableGravatar)
245248
if IsErrSettingIsNotExist(err) {
246-
disableGravatar = setting.GetDefaultDisableGravatar()
249+
disableGravatar = setting_module.GetDefaultDisableGravatar()
247250
disableGravatarSetting = &Setting{SettingValue: strconv.FormatBool(disableGravatar)}
248251
} else if err != nil {
249252
return err
@@ -254,24 +257,24 @@ func Init() error {
254257
var enableFederatedAvatar bool
255258
enableFederatedAvatarSetting, err := GetSettingNoCache(KeyPictureEnableFederatedAvatar)
256259
if IsErrSettingIsNotExist(err) {
257-
enableFederatedAvatar = setting.GetDefaultEnableFederatedAvatar(disableGravatar)
260+
enableFederatedAvatar = setting_module.GetDefaultEnableFederatedAvatar(disableGravatar)
258261
enableFederatedAvatarSetting = &Setting{SettingValue: strconv.FormatBool(enableFederatedAvatar)}
259262
} else if err != nil {
260263
return err
261264
} else {
262265
enableFederatedAvatar = disableGravatarSetting.GetValueBool()
263266
}
264267

265-
if setting.OfflineMode {
268+
if setting_module.OfflineMode {
266269
disableGravatar = true
267270
enableFederatedAvatar = false
268271
}
269272

270273
if enableFederatedAvatar || !disableGravatar {
271274
var err error
272-
GravatarSourceURL, err = url.Parse(setting.GravatarSource)
275+
GravatarSourceURL, err = url.Parse(setting_module.GravatarSource)
273276
if err != nil {
274-
return fmt.Errorf("Failed to parse Gravatar URL(%s): %w", setting.GravatarSource, err)
277+
return fmt.Errorf("Failed to parse Gravatar URL(%s): %w", setting_module.GravatarSource, err)
275278
}
276279
}
277280

Diff for: models/system/setting_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,14 @@ func TestSettings(t *testing.T) {
3333
assert.EqualValues(t, newSetting.SettingValue, settings[strings.ToLower(keyName)].SettingValue)
3434

3535
// updated setting
36-
updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: newSetting.Version}
36+
updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: settings[strings.ToLower(keyName)].Version}
3737
err = system.SetSetting(updatedSetting)
3838
assert.NoError(t, err)
3939

40+
value, err := system.GetSetting(keyName)
41+
assert.NoError(t, err)
42+
assert.EqualValues(t, updatedSetting.SettingValue, value)
43+
4044
// get all settings
4145
settings, err = system.GetAllSettings()
4246
assert.NoError(t, err)

0 commit comments

Comments
 (0)