Browse Source

postgres test passed

pull/55/head
yedf2 4 years ago
parent
commit
7d40b37334
  1. 4
      dtmcli/barrier.postgres.sql
  2. 2
      dtmcli/dtmimp/utils.go
  3. 24
      dtmsvr/dtmsvr.postgres.sql
  4. 4
      examples/examples.postgres.sql
  5. 6
      go.mod
  6. 9
      go.sum
  7. 8
      test/xa_test.go

4
dtmcli/barrier.postgres.sql

@ -9,8 +9,8 @@ create table if not exists dtm_barrier.barrier(
op varchar(45) default '', op varchar(45) default '',
barrier_id varchar(45) default '', barrier_id varchar(45) default '',
reason varchar(45) default '', reason varchar(45) default '',
create_time timestamp(0) DEFAULT NULL, create_time timestamp(0) with time zone DEFAULT NULL,
update_time timestamp(0) DEFAULT NULL, update_time timestamp(0) with time zone DEFAULT NULL,
PRIMARY KEY(id), PRIMARY KEY(id),
CONSTRAINT uniq_barrier unique(gid, branch_id, op, barrier_id) CONSTRAINT uniq_barrier unique(gid, branch_id, op, barrier_id)
); );

2
dtmcli/dtmimp/utils.go

@ -220,7 +220,7 @@ func GetDsn(conf map[string]string) string {
dsn := map[string]string{ dsn := map[string]string{
"mysql": fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Local", "mysql": fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
conf["user"], conf["password"], host, conf["port"], conf["database"]), conf["user"], conf["password"], host, conf["port"], conf["database"]),
"postgres": fmt.Sprintf("host=%s user=%s password=%s dbname='%s' port=%s sslmode=disable TimeZone=Asia/Shanghai", "postgres": fmt.Sprintf("host=%s user=%s password=%s dbname='%s' port=%s sslmode=disable",
host, conf["user"], conf["password"], conf["database"], conf["port"]), host, conf["user"], conf["password"], conf["database"], conf["port"]),
}[driver] }[driver]
PanicIf(dsn == "", fmt.Errorf("unknow driver: %s", driver)) PanicIf(dsn == "", fmt.Errorf("unknow driver: %s", driver))

24
dtmsvr/dtmsvr.postgres.sql

@ -11,15 +11,15 @@ CREATE TABLE if not EXISTS dtm.trans_global (
status varchar(45) NOT NULL, status varchar(45) NOT NULL,
query_prepared varchar(128) NOT NULL, query_prepared varchar(128) NOT NULL,
protocol varchar(45) not null, protocol varchar(45) not null,
create_time timestamp(0) DEFAULT NULL, create_time timestamp(0) with time zone DEFAULT NULL,
update_time timestamp(0) DEFAULT NULL, update_time timestamp(0) with time zone DEFAULT NULL,
commit_time timestamp(0) DEFAULT NULL, commit_time timestamp(0) with time zone DEFAULT NULL,
finish_time timestamp(0) DEFAULT NULL, finish_time timestamp(0) with time zone DEFAULT NULL,
rollback_time timestamp(0) DEFAULT NULL, rollback_time timestamp(0) with time zone DEFAULT NULL,
options varchar(256) DEFAULT '', options varchar(256) DEFAULT '',
custom_data varchar(256) DEFAULT '', custom_data varchar(256) DEFAULT '',
next_cron_interval int default null, next_cron_interval int default null,
next_cron_time timestamp(0) default null, next_cron_time timestamp(0) with time zone default null,
owner varchar(128) not null default '', owner varchar(128) not null default '',
PRIMARY KEY (id), PRIMARY KEY (id),
CONSTRAINT gid UNIQUE (gid) CONSTRAINT gid UNIQUE (gid)
@ -34,14 +34,14 @@ CREATE TABLE IF NOT EXISTS dtm.trans_branch_op (
gid varchar(128) NOT NULL, gid varchar(128) NOT NULL,
url varchar(128) NOT NULL, url varchar(128) NOT NULL,
data TEXT, data TEXT,
bin_data BLOB, bin_data bytea,
branch_id VARCHAR(128) NOT NULL, branch_id VARCHAR(128) NOT NULL,
op varchar(45) NOT NULL, op varchar(45) NOT NULL,
status varchar(45) NOT NULL, status varchar(45) NOT NULL,
finish_time timestamp(0) DEFAULT NULL, finish_time timestamp(0) with time zone DEFAULT NULL,
rollback_time timestamp(0) DEFAULT NULL, rollback_time timestamp(0) with time zone DEFAULT NULL,
create_time timestamp(0) DEFAULT NULL, create_time timestamp(0) with time zone DEFAULT NULL,
update_time timestamp(0) DEFAULT NULL, update_time timestamp(0) with time zone DEFAULT NULL,
PRIMARY KEY (id), PRIMARY KEY (id),
CONSTRAINT gid_uniq UNIQUE (gid, branch_id, op) CONSTRAINT gid_branch_uniq UNIQUE (gid, branch_id, op)
); );

4
examples/examples.postgres.sql

@ -9,8 +9,8 @@ create table if not exists dtm_busi.user_account(
user_id int UNIQUE, user_id int UNIQUE,
balance DECIMAL(10, 2) not null default '0', balance DECIMAL(10, 2) not null default '0',
trading_balance DECIMAL(10, 2) not null default '0', trading_balance DECIMAL(10, 2) not null default '0',
create_time timestamp(0) DEFAULT now(), create_time timestamp(0) with time zone DEFAULT now(),
update_time timestamp(0) DEFAULT now() update_time timestamp(0) with time zone DEFAULT now()
); );
-- SQLINES LICENSE FOR EVALUATION USE ONLY -- SQLINES LICENSE FOR EVALUATION USE ONLY
create index if not exists create_idx on dtm_busi.user_account(create_time); create index if not exists create_idx on dtm_busi.user_account(create_time);

6
go.mod

@ -12,6 +12,8 @@ require (
github.com/lib/pq v1.10.3 github.com/lib/pq v1.10.3
github.com/prometheus/client_golang v1.11.0 github.com/prometheus/client_golang v1.11.0
github.com/stretchr/testify v1.7.0 github.com/stretchr/testify v1.7.0
github.com/yedf/dtmcli v1.5.1
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa // indirect
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect
google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67 // indirect google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67 // indirect
@ -19,7 +21,7 @@ require (
google.golang.org/protobuf v1.27.1 google.golang.org/protobuf v1.27.1
gopkg.in/yaml.v2 v2.3.0 gopkg.in/yaml.v2 v2.3.0
gorm.io/driver/mysql v1.0.3 gorm.io/driver/mysql v1.0.3
gorm.io/driver/postgres v1.1.2 gorm.io/driver/postgres v1.2.1
gorm.io/gorm v1.21.15 gorm.io/gorm v1.22.2
// gotest.tools v2.2.0+incompatible // gotest.tools v2.2.0+incompatible
) )

9
go.sum

@ -243,6 +243,8 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/yedf/dtmcli v1.5.1 h1:KGeFpRc9nOJ382YfT06I21jX2R9urfmL7JG9SLIBERA=
github.com/yedf/dtmcli v1.5.1/go.mod h1:errG1rA5vaT70B00s6cAKo7O/tD1CLI8CGrESSaTsqw=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
@ -271,6 +273,8 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa h1:idItI2DDfCokpg0N51B2VtiLdJ4vAuXC9fnCb2gACo4=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@ -423,9 +427,14 @@ gorm.io/driver/mysql v1.0.3 h1:+JKBYPfn1tygR1/of/Fh2T8iwuVwzt+PEJmKaXzMQXg=
gorm.io/driver/mysql v1.0.3/go.mod h1:twGxftLBlFgNVNakL7F+P/x9oYqoymG3YYT8cAfI9oI= gorm.io/driver/mysql v1.0.3/go.mod h1:twGxftLBlFgNVNakL7F+P/x9oYqoymG3YYT8cAfI9oI=
gorm.io/driver/postgres v1.1.2 h1:Amy3hCvLqM+/ICzjCnQr8wKFLVJTeOTdlMT7kCP+J1Q= gorm.io/driver/postgres v1.1.2 h1:Amy3hCvLqM+/ICzjCnQr8wKFLVJTeOTdlMT7kCP+J1Q=
gorm.io/driver/postgres v1.1.2/go.mod h1:/AGV0zvqF3mt9ZtzLzQmXWQ/5vr+1V1TyHZGZVjzmwI= gorm.io/driver/postgres v1.1.2/go.mod h1:/AGV0zvqF3mt9ZtzLzQmXWQ/5vr+1V1TyHZGZVjzmwI=
gorm.io/driver/postgres v1.2.1 h1:JDQKnF7MC51dgL09Vbydc5kl83KkVDlcXfSPJ+xhh68=
gorm.io/driver/postgres v1.2.1/go.mod h1:SHRZhu+D0tLOHV5qbxZRUM6kBcf3jp/kxPz2mYMTsNY=
gorm.io/gorm v1.20.4/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= gorm.io/gorm v1.20.4/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
gorm.io/gorm v1.21.15 h1:gAyaDoPw0lCyrSFWhBlahbUA1U4P5RViC1uIqoB+1Rk= gorm.io/gorm v1.21.15 h1:gAyaDoPw0lCyrSFWhBlahbUA1U4P5RViC1uIqoB+1Rk=
gorm.io/gorm v1.21.15/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= gorm.io/gorm v1.21.15/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0=
gorm.io/gorm v1.22.0/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0=
gorm.io/gorm v1.22.2 h1:1iKcvyJnR5bHydBhDqTwasOkoo6+o4Ms5cknSt6qP7I=
gorm.io/gorm v1.22.2/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=

8
test/xa_test.go

@ -40,9 +40,11 @@ func TestXaDuplicate(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
sdb, err := dtmimp.StandaloneDB(common.DtmConfig.DB) sdb, err := dtmimp.StandaloneDB(common.DtmConfig.DB)
assert.Nil(t, err) assert.Nil(t, err)
_, err = dtmimp.DBExec(sdb, "xa recover") if dtmcli.GetCurrentDBType() == dtmcli.DBTypeMysql {
assert.Nil(t, err) _, err = dtmimp.DBExec(sdb, "xa recover")
_, err = dtmimp.DBExec(sdb, fmt.Sprintf("xa commit '%s-01'", gid)) // 先把某一个事务提交,模拟重复请求 assert.Nil(t, err)
}
_, err = dtmimp.DBExec(sdb, dtmimp.GetDBSpecial().GetXaSQL("commit", gid+"-01")) // 先把某一个事务提交,模拟重复请求
assert.Nil(t, err) assert.Nil(t, err)
return xa.CallBranch(req, examples.Busi+"/TransInXa") return xa.CallBranch(req, examples.Busi+"/TransInXa")
}) })

Loading…
Cancel
Save