Skip to content

Commit

Permalink
feat: add tm config (#398)
Browse files Browse the repository at this point in the history
feat(pkg/client,pkg/config): add tm config
  • Loading branch information
liushao authored Dec 12, 2022
1 parent 334879e commit 2a12a86
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 7 deletions.
22 changes: 18 additions & 4 deletions pkg/client/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import (
"runtime"
"strings"

"github.com/seata/seata-go/pkg/tm"

"github.com/knadh/koanf"
"github.com/knadh/koanf/parsers/json"
"github.com/knadh/koanf/parsers/toml"
Expand All @@ -47,12 +49,25 @@ const (
ymlSuffix = "yml"
)

type ClientConfig struct {
TmConfig tm.TmConfig `yaml:"tm" json:"tm,omitempty" koanf:"tm"`
}

func (c *ClientConfig) RegisterFlagsWithPrefix(prefix string, f *flag.FlagSet) {
// TODO: RmConf RegisterFlagsWithPrefix
// TODO: Undo RegisterFlagsWithPrefix
// TODO: LoadBalance RegisterFlagsWithPrefix
c.TmConfig.RegisterFlagsWithPrefix(prefix+".tm", f)
}

type Config struct {
TCCConfig tcc.Config `yaml:"tcc" json:"tcc" koanf:"tcc"`
TCCConfig tcc.Config `yaml:"tcc" json:"tcc" koanf:"tcc"`
ClientConfig ClientConfig `yaml:"client" json:"client" koanf:"client"`
}

func (c *Config) RegisterFlags(f *flag.FlagSet) {
c.TCCConfig.FenceConfig.RegisterFlagsWithPrefix("tcc", f)
c.ClientConfig.RegisterFlagsWithPrefix("client", f)
}

type loaderConf struct {
Expand Down Expand Up @@ -108,7 +123,7 @@ func getJsonConfigResolver(bytes []byte) *koanf.Koanf {
return k
}

//resolverFilePath resolver file path
// resolverFilePath resolver file path
// eg: give a ./conf/seatago.yaml return seatago and yaml
func resolverFilePath(path string) (name, suffix string) {
paths := strings.Split(path, "/")
Expand Down Expand Up @@ -175,7 +190,6 @@ func newLoaderConf(configFilePath string) *loaderConf {

// absolutePath get absolut path
func absolutePath(inPath string) string {

if inPath == "$HOME" || strings.HasPrefix(inPath, "$HOME"+string(os.PathSeparator)) {
inPath = userHomeDir() + inPath[5:]
}
Expand All @@ -192,7 +206,7 @@ func absolutePath(inPath string) string {
return ""
}

//userHomeDir get gopath
// userHomeDir get gopath
func userHomeDir() string {
if runtime.GOOS == "windows" {
home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
Expand Down
24 changes: 23 additions & 1 deletion pkg/client/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,41 @@ func TestLoadPath(t *testing.T) {

assert.Equal(t, "tcc_fence_log_test", cfg.TCCConfig.FenceConfig.LogTableName)
assert.Equal(t, time.Second*60, cfg.TCCConfig.FenceConfig.CleanPeriod)

assert.NotNil(t, cfg.ClientConfig)
assert.NotNil(t, cfg.ClientConfig.TmConfig)
assert.Equal(t, 5, cfg.ClientConfig.TmConfig.CommitRetryCount)
assert.Equal(t, 5, cfg.ClientConfig.TmConfig.RollbackRetryCount)
assert.Equal(t, time.Second*60, cfg.ClientConfig.TmConfig.DefaultGlobalTransactionTimeout)
assert.Equal(t, false, cfg.ClientConfig.TmConfig.DegradeCheck)
assert.Equal(t, 2000, cfg.ClientConfig.TmConfig.DegradeCheckPeriod)
assert.Equal(t, time.Second*10, cfg.ClientConfig.TmConfig.DegradeCheckAllowTimes)
assert.Equal(t, -2147482648, cfg.ClientConfig.TmConfig.InterceptorOrder)

// reset flag.CommandLine
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
}

func TestLoadJson(t *testing.T) {
confJson := `{"tcc":{"fence":{"log-table-name":"tcc_fence_log_test2","clean-period":80000000000}}}`
confJson := `{"client":{"tm":{"commit-retry-count":5,"rollback-retry-count":5,"default-global-transaction-timeout":"60s","degrade-check":false,"degrade-check-period":2000,"degrade-check-allow-times":"10s","interceptor-order":-2147482648}},"tcc":{"fence":{"log-table-name":"tcc_fence_log_test2","clean-period":80000000000}}}`
cfg := LoadJson([]byte(confJson))
assert.NotNil(t, cfg)
assert.NotNil(t, cfg.TCCConfig)
assert.NotNil(t, cfg.TCCConfig.FenceConfig)

assert.Equal(t, "tcc_fence_log_test2", cfg.TCCConfig.FenceConfig.LogTableName)
assert.Equal(t, time.Second*80, cfg.TCCConfig.FenceConfig.CleanPeriod)

assert.NotNil(t, cfg.ClientConfig)
assert.NotNil(t, cfg.ClientConfig.TmConfig)
assert.Equal(t, 5, cfg.ClientConfig.TmConfig.CommitRetryCount)
assert.Equal(t, 5, cfg.ClientConfig.TmConfig.RollbackRetryCount)
assert.Equal(t, time.Second*60, cfg.ClientConfig.TmConfig.DefaultGlobalTransactionTimeout)
assert.Equal(t, false, cfg.ClientConfig.TmConfig.DegradeCheck)
assert.Equal(t, 2000, cfg.ClientConfig.TmConfig.DegradeCheckPeriod)
assert.Equal(t, time.Second*10, cfg.ClientConfig.TmConfig.DegradeCheckAllowTimes)
assert.Equal(t, -2147482648, cfg.ClientConfig.TmConfig.InterceptorOrder)

// reset flag.CommandLine
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
}
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ func (u *MySQLInsertUndoLogBuilder) getPkValues(execCtx *types.ExecContext, pars
return pkValuesMap, nil
}

//containsPK the columns contains table meta pk
// containsPK the columns contains table meta pk
func (u *MySQLInsertUndoLogBuilder) containsPK(meta types.TableMeta, parseCtx *types.ParseContext) bool {
pkColumnNameList := meta.GetPrimaryKeyOnlyName()
if len(pkColumnNameList) == 0 {
Expand Down
43 changes: 43 additions & 0 deletions pkg/tm/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 tm

import (
"flag"
"time"
)

type TmConfig struct {
CommitRetryCount int `yaml:"commit-retry-count" json:"commit-retry-count" koanf:"commit-retry-count"`
RollbackRetryCount int `yaml:"rollback-retry-count" json:"rollback-retry-count" koanf:"rollback-retry-count"`
DefaultGlobalTransactionTimeout time.Duration `yaml:"default-global-transaction-timeout" json:"default-global-transaction-timeout,omitempty" koanf:"default-global-transaction-timeout"`
DegradeCheck bool `yaml:"degrade-check" json:"degrade-check" koanf:"degrade-check"`
DegradeCheckPeriod int `yaml:"degrade-check-period" json:"degrade-check-period" koanf:"degrade-check-period"`
DegradeCheckAllowTimes time.Duration `yaml:"degrade-check-allow-times" json:"degrade-check-allow-times" koanf:"degrade-check-allow-times"`
InterceptorOrder int `yaml:"interceptor-order" json:"interceptor-order" koanf:"interceptor-order"`
}

func (cfg *TmConfig) RegisterFlagsWithPrefix(prefix string, f *flag.FlagSet) {
f.IntVar(&cfg.CommitRetryCount, prefix+".commit-retry-count", 5, "The maximum number of retries when commit global transaction.")
f.IntVar(&cfg.RollbackRetryCount, prefix+".rollback-retry-count", 5, "The maximum number of retries when rollback global transaction.")
f.DurationVar(&cfg.DefaultGlobalTransactionTimeout, prefix+".default-global-transaction-timeout", 60*time.Second, "The timeout for a global transaction.")
f.BoolVar(&cfg.DegradeCheck, prefix+".degrade-check", false, "The switch for degrade check.")
f.IntVar(&cfg.DegradeCheckPeriod, prefix+".degrade-check-period", 2000, "The period for degrade checking.")
f.DurationVar(&cfg.DegradeCheckAllowTimes, prefix+".degrade-check-allow-times", 10*time.Second, "The duration allowed for degrade checking.")
f.IntVar(&cfg.InterceptorOrder, prefix+".interceptor-order", -2147482648, "The order of interceptor.")
}
2 changes: 1 addition & 1 deletion testdata/conf/seatago.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ seata:
tm:
commit-retry-count: 5
rollback-retry-count: 5
default-global-transaction-timeout: 10s
default-global-transaction-timeout: 60s
degrade-check: false
degrade-check-period: 2000
degrade-check-allow-times: 10s
Expand Down

0 comments on commit 2a12a86

Please sign in to comment.