diff --git a/pkg/settings/kv_decoder.go b/pkg/settings/kv_decoder.go index 926eae5c7..58afda415 100644 --- a/pkg/settings/kv_decoder.go +++ b/pkg/settings/kv_decoder.go @@ -3,6 +3,7 @@ package settings import ( "github.com/pkg/errors" "reflect" + "strconv" "strings" ) @@ -143,8 +144,18 @@ func DecodeKV(kv KV, dst interface{}, pp ...string) (err error) { // Native type if val, ok := kv[key]; ok { // Always use pointer to value - if err = val.Unmarshal(structField.Addr().Interface()); err != nil { - return errors.Wrapf(err, "cannot decode settings for %q", key) + if val.Unmarshal(structField.Addr().Interface()) != nil { + // Try to get numbers encoded as strings... + var tmp interface{} + if val.Unmarshal(&tmp) != nil { + return err + } + + switch cnv := tmp.(type) { + case string: + num, _ := strconv.ParseUint(cnv, 10, 64) + structField.SetUint(num) + } } } } diff --git a/pkg/settings/service.go b/pkg/settings/service.go index 72fd441a9..821847d44 100644 --- a/pkg/settings/service.go +++ b/pkg/settings/service.go @@ -130,7 +130,6 @@ func (svc service) BulkSet(ctx context.Context, vv ValueSet) (err error) { } else { vv = current.Changed(vv) } - err = svc.repository.With(ctx).BulkSet(vv) if err != nil { return