Browse Source

feat: add tm config (#398)

feat(pkg/client,pkg/config): add tm config
tags/v1.0.3
liushao GitHub 2 years ago
parent
commit
2a12a86bea
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 86 additions and 7 deletions
  1. +18
    -4
      pkg/client/config.go
  2. +23
    -1
      pkg/client/config_test.go
  3. +1
    -1
      pkg/datasource/sql/undo/builder/mysql_insert_undo_log_builder.go
  4. +43
    -0
      pkg/tm/config.go
  5. +1
    -1
      testdata/conf/seatago.yml

+ 18
- 4
pkg/client/config.go View File

@@ -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"
@@ -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 {
@@ -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, "/")
@@ -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:]
}
@@ -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")


+ 23
- 1
pkg/client/config_test.go View File

@@ -34,12 +34,23 @@ 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)
@@ -47,6 +58,17 @@ func TestLoadJson(t *testing.T) {

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)
}

+ 1
- 1
pkg/datasource/sql/undo/builder/mysql_insert_undo_log_builder.go View File

@@ -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 {


+ 43
- 0
pkg/tm/config.go View File

@@ -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.")
}

+ 1
- 1
testdata/conf/seatago.yml View File

@@ -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


Loading…
Cancel
Save