mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-06 17:18:35 +08:00
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com> Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
110 lines
2.5 KiB
Go
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
|
|
}
|