看着像是bug
func (inst *TiKVInstance) Start(ctx context.Context, version utils.Version) error {
configPath := filepath.Join(inst.Dir, "tikv.toml")
if err := prepareConfig(
configPath,
inst.ConfigPath,
inst.getConfig(),
); err != nil {
return err
}
endpoints := pdEndpoints(inst.pds, true)
args := []string{
fmt.Sprintf("--addr=%s", utils.JoinHostPort(inst.Host, inst.Port)),
fmt.Sprintf("--advertise-addr=%s", utils.JoinHostPort(AdvertiseHost(inst.Host), inst.Port)),
fmt.Sprintf("--status-addr=%s", utils.JoinHostPort(inst.Host, inst.StatusPort)),
fmt.Sprintf("--pd-endpoints=%s", strings.Join(endpoints, ",")),
fmt.Sprintf("--config=%s", configPath),
fmt.Sprintf("--data-dir=%s", filepath.Join(inst.Dir, "data")),
fmt.Sprintf("--log-file=%s", inst.LogFile()),
}
在prepareConfig这个函数中接收inst.ConfigPath但是没有使用
func prepareConfig(outputConfigPath string, userConfigPath string, preDefinedConfig map[string]any) error {
dir := filepath.Dir(outputConfigPath)
if err := utils.MkdirAll(dir, 0755); err != nil {
return err
}
userConfig, err := unmarshalConfig(userConfigPath)
if err != nil {
return errors.Trace(err)
}
if userConfig == nil {
userConfig = make(map[string]any)
}
cf, err := os.Create(outputConfigPath)
if err != nil {
return errors.Trace(err)
}
enc := toml.NewEncoder(cf)
enc.Indent = ""
return enc.Encode(spec.MergeConfig(preDefinedConfig, userConfig))
}
只是对userConfigPath进行了合并,然后写到了tikv.toml,而真正启动时使用的是args中的fmt.Sprintf(“–data-dir=%s”, filepath.Join(inst.Dir, “data”))