milvus/internal/util/paramtable/param_item.go
Enwei Jiao c05b9ad539
Add event dispatcher for config (#20393)
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>

Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
2022-11-17 18:59:09 +08:00

110 lines
2.5 KiB
Go

// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package paramtable
import (
"strconv"
"strings"
"github.com/milvus-io/milvus/internal/config"
)
type ParamItem struct {
Key string // which should be named as "A.B.C"
Version string
Doc string
DefaultValue string
PanicIfEmpty bool
Formatter func(originValue string) string
manager *config.Manager
}
func (pi *ParamItem) Init(manager *config.Manager) {
pi.manager = manager
}
// Get original value with error
func (pi *ParamItem) get() (string, error) {
ret, err := pi.manager.GetConfig(pi.Key)
if err != nil {
ret = pi.DefaultValue
}
if pi.Formatter == nil {
return ret, err
}
return pi.Formatter(ret), err
}
func (pi *ParamItem) GetValue() string {
v, _ := pi.get()
return v
}
func (pi *ParamItem) GetAsStrings() []string {
return getAndConvert(pi, func(value string) ([]string, error) {
return strings.Split(value, ","), nil
}, []string{})
}
func (pi *ParamItem) GetAsBool() bool {
return getAndConvert(pi, strconv.ParseBool, false)
}
func (pi *ParamItem) GetAsInt() int {
return getAndConvert(pi, strconv.Atoi, 0)
}
type CompositeParamItem struct {
Items []*ParamItem
Format func(map[string]string) string
}
func (cpi *CompositeParamItem) GetValue() string {
kvs := make(map[string]string, len(cpi.Items))
for _, v := range cpi.Items {
kvs[v.Key] = v.GetValue()
}
return cpi.Format(kvs)
}
type ParamGroup struct {
KeyPrefix string // which should be named as "A.B."
Version string
Doc string
GetFunc func() map[string]string
manager *config.Manager
}
func (pg *ParamGroup) Init(manager *config.Manager) {
pg.manager = manager
}
func (pg *ParamGroup) GetValue() map[string]string {
if pg.GetFunc != nil {
return pg.GetFunc()
}
values := pg.manager.GetConfigsByPattern(pg.KeyPrefix, false)
return values
}
func getAndConvert[T any](pi *ParamItem, converter func(input string) (T, error), defaultValue T) T {
v, _ := pi.get()
t, err := converter(v)
if err != nil {
return defaultValue
}
return t
}