add env for config

This commit is contained in:
yedf2 2021-08-05 11:26:34 +08:00
parent 55872133b8
commit d7e2bc6777
9 changed files with 49 additions and 82 deletions

View File

@ -3,11 +3,15 @@ package common
import ( import (
"database/sql" "database/sql"
"fmt" "fmt"
"io/ioutil"
"os"
"path/filepath"
"strings" "strings"
"time" "time"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
"github.com/yedf/dtm/dtmcli" "github.com/yedf/dtm/dtmcli"
"gopkg.in/yaml.v2"
// _ "github.com/lib/pq" // _ "github.com/lib/pq"
@ -117,3 +121,40 @@ func DbGet(conf map[string]string) *DB {
} }
return dbs[dsn] return dbs[dsn]
} }
type dtmConfigType struct {
TransCronInterval int64 `yaml:"TransCronInterval"` // 单位秒 当事务等待这个时间之后还没有变化则进行一轮处理包括prepared中的任务和committed的任务
DB map[string]string `yaml:"DB"`
}
// DtmConfig 配置
var DtmConfig = dtmConfigType{}
func init() {
DtmConfig.TransCronInterval = int64(dtmcli.MustAtoi(dtmcli.OrString(os.Getenv("TRANS_CRON_INTERVAL"), "10")))
DtmConfig.DB = map[string]string{
"driver": os.Getenv("DB_DRIVER"),
"host": os.Getenv("DB_HOST"),
"port": os.Getenv("DB_PORT"),
"user": os.Getenv("DB_USER"),
"password": os.Getenv("DB_PASSWORD"),
}
cont := []byte{}
for d := MustGetwd(); d != ""; d = filepath.Dir(d) {
cont1, err := ioutil.ReadFile(d + "/conf.yml")
if err != nil {
cont1, err = ioutil.ReadFile(d + "/conf.sample.yml")
}
if cont1 != nil {
cont = cont1
break
}
}
if cont != nil {
dtmcli.Logf("cont is: \n%s", string(cont))
err := yaml.Unmarshal(cont, &DtmConfig)
dtmcli.FatalIfError(err)
}
dtmcli.LogIfFatalf(DtmConfig.DB["driver"] == "" || DtmConfig.DB["user"] == "",
"dtm config error: %v. check you env, and conf.yml/conf.sample.yml found in current and parent path: %s", DtmConfig, MustGetwd())
}

View File

@ -7,18 +7,8 @@ import (
"github.com/yedf/dtm/dtmcli" "github.com/yedf/dtm/dtmcli"
) )
type testConfig struct {
DB map[string]string `yaml:"DB"`
}
var config = testConfig{}
func init() {
InitConfig(&config)
}
func TestDb(t *testing.T) { func TestDb(t *testing.T) {
db := DbGet(config.DB) db := DbGet(DtmConfig.DB)
err := func() (rerr error) { err := func() (rerr error) {
defer dtmcli.P2E(&rerr) defer dtmcli.P2E(&rerr)
dbr := db.NoMust().Exec("select a") dbr := db.NoMust().Exec("select a")
@ -30,7 +20,7 @@ func TestDb(t *testing.T) {
} }
func TestDbAlone(t *testing.T) { func TestDbAlone(t *testing.T) {
db, err := dtmcli.SdbAlone(config.DB) db, err := dtmcli.SdbAlone(DtmConfig.DB)
assert.Nil(t, err) assert.Nil(t, err)
_, err = dtmcli.SdbExec(db, "select 1") _, err = dtmcli.SdbExec(db, "select 1")
assert.Equal(t, nil, err) assert.Equal(t, nil, err)

View File

@ -12,7 +12,6 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
"github.com/yedf/dtm/dtmcli" "github.com/yedf/dtm/dtmcli"
yaml "gopkg.in/yaml.v2"
) )
// GetGinApp init and return gin // GetGinApp init and return gin
@ -74,22 +73,3 @@ func GetCurrentCodeDir() string {
_, file, _, _ := runtime.Caller(1) _, file, _, _ := runtime.Caller(1)
return filepath.Dir(file) return filepath.Dir(file)
} }
// InitConfig init config
func InitConfig(config interface{}) {
cont := []byte{}
for d := MustGetwd(); d != ""; d = filepath.Dir(d) {
cont1, err := ioutil.ReadFile(d + "/conf.yml")
if err != nil {
cont1, err = ioutil.ReadFile(d + "/conf.sample.yml")
}
if cont1 != nil {
cont = cont1
break
}
}
dtmcli.LogIfFatalf(cont == nil, "no config file conf.yml/conf.sample.yml found in current and parent path: %s", MustGetwd())
dtmcli.Logf("cont is: \n%s", string(cont))
err := yaml.Unmarshal(cont, config)
dtmcli.FatalIfError(err)
}

View File

@ -1,18 +0,0 @@
package dtmsvr
import (
"github.com/yedf/dtm/common"
)
type dtmsvrConfig struct {
TransCronInterval int64 `yaml:"TransCronInterval"` // 单位秒 当事务等待这个时间之后还没有变化则进行一轮处理包括prepared中的任务和committed的任务
DB map[string]string `yaml:"DB"`
}
var config = &dtmsvrConfig{
TransCronInterval: 10,
}
func init() {
common.InitConfig(&config)
}

View File

@ -42,7 +42,6 @@ func resetXaData() {
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
TransProcessedTestChan = make(chan string, 1) TransProcessedTestChan = make(chan string, 1)
common.InitConfig(&config)
PopulateDB(false) PopulateDB(false)
examples.PopulateDB(false) examples.PopulateDB(false)
// 启动组件 // 启动组件

View File

@ -17,6 +17,8 @@ type M = map[string]interface{}
var p2e = dtmcli.P2E var p2e = dtmcli.P2E
var e2p = dtmcli.E2P var e2p = dtmcli.E2P
var config = common.DtmConfig
func dbGet() *common.DB { func dbGet() *common.DB {
return common.DbGet(config.DB) return common.DbGet(config.DB)
} }

View File

@ -1,15 +0,0 @@
package examples
import (
"github.com/yedf/dtm/common"
)
type exampleConfig struct {
DB map[string]string `yaml:"DB"`
}
var config = exampleConfig{}
func init() {
common.InitConfig(&config)
}

View File

@ -9,6 +9,8 @@ import (
"github.com/yedf/dtm/dtmcli" "github.com/yedf/dtm/dtmcli"
) )
var config = common.DtmConfig
// RunSQLScript 1 // RunSQLScript 1
func RunSQLScript(conf map[string]string, script string, skipDrop bool) { func RunSQLScript(conf map[string]string, script string, skipDrop bool) {
con, err := dtmcli.SdbAlone(conf) con, err := dtmcli.SdbAlone(conf)
@ -31,4 +33,6 @@ func RunSQLScript(conf map[string]string, script string, skipDrop bool) {
func PopulateDB(skipDrop bool) { func PopulateDB(skipDrop bool) {
file := fmt.Sprintf("%s/examples.%s.sql", common.GetCurrentCodeDir(), config.DB["driver"]) file := fmt.Sprintf("%s/examples.%s.sql", common.GetCurrentCodeDir(), config.DB["driver"])
RunSQLScript(config.DB, file, skipDrop) RunSQLScript(config.DB, file, skipDrop)
file = fmt.Sprintf("%s/../dtmcli/barrier.%s.sql", common.GetCurrentCodeDir(), config.DB["driver"])
RunSQLScript(config.DB, file, skipDrop)
} }

View File

@ -1,5 +1,4 @@
CREATE DATABASE if not exists dtm_busi /*!40100 DEFAULT CHARACTER SET utf8mb4 */; CREATE DATABASE if not exists dtm_busi /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
create database if not exists dtm_barrier /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
drop table if exists dtm_busi.user_account; drop table if exists dtm_busi.user_account;
create table if not exists dtm_busi.user_account( create table if not exists dtm_busi.user_account(
@ -28,18 +27,3 @@ create table if not exists dtm_busi.user_account_trading( -- 表示交易中被
insert into dtm_busi.user_account_trading (user_id, trading_balance) values (1, 0), (2, 0) on DUPLICATE KEY UPDATE trading_balance=values (trading_balance); insert into dtm_busi.user_account_trading (user_id, trading_balance) values (1, 0), (2, 0) on DUPLICATE KEY UPDATE trading_balance=values (trading_balance);
drop table if exists dtm_barrier.barrier;
create table if not exists dtm_barrier.barrier(
id int(11) PRIMARY KEY AUTO_INCREMENT,
trans_type varchar(45) default '' ,
gid varchar(128) default'',
branch_id varchar(128) default '',
branch_type varchar(45) default '',
reason varchar(45) default '' comment 'the branch type who insert this record',
result varchar(2047) default null comment 'the business result of this branch',
create_time datetime DEFAULT now(),
update_time datetime DEFAULT now(),
key(create_time),
key(update_time),
UNIQUE key(gid, branch_id, branch_type)
);