From eb43410b840197157547291bf1bf2de4fb349a2f Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 7 Mar 2022 19:46:18 +0800 Subject: [PATCH 01/41] update dtmdriver-polaris --- go.mod | 3 ++- go.sum | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 657f60a..7295e52 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,10 @@ go 1.16 require ( bou.ke/monkey v1.0.2 + github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 - github.com/dtm-labs/dtmdriver-polaris v0.0.3 + github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.0 github.com/go-redis/redis/v8 v8.11.4 diff --git a/go.sum b/go.sum index 2564071..c28bc04 100644 --- a/go.sum +++ b/go.sum @@ -50,6 +50,8 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= github.com/agiledragon/gomonkey v0.0.0-20190517145658-8fa491f7b918 h1:a88Ln+jbIokfi6xoKtq10dbgp4VMg1CmHF1J42p8EyE= github.com/agiledragon/gomonkey v0.0.0-20190517145658-8fa491f7b918/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= +github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= +github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -117,6 +119,8 @@ github.com/dtm-labs/dtmdriver-polaris v0.0.2 h1:bh8u7bLWhairwpiA688dZMAX/OWcRoQk github.com/dtm-labs/dtmdriver-polaris v0.0.2/go.mod h1:vyXDTRj3CpROiRnI0dqM/lHFfZaKY9JAS1MSey2azIQ= github.com/dtm-labs/dtmdriver-polaris v0.0.3 h1:oqvYq7X6iDUCECjSE82gsGP1Du0vhcpHNmxM8Uo7470= github.com/dtm-labs/dtmdriver-polaris v0.0.3/go.mod h1:yGdzgar7r8SmzTDeEn0CuVq9xo1NX7x327MhxuU9sxM= +github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= +github.com/dtm-labs/dtmdriver-polaris v0.0.4/go.mod h1:zwNFE3z0B7Ky35W2Ks9LkpMGiuIt9YFuocy4qaedCLE= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1/go.mod h1:x3bRe8x7pAfHIIQBTK+LibVq96gBSzMzsgRYe85zxAc= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -292,6 +296,8 @@ github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/U github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= @@ -431,6 +437,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -476,8 +484,12 @@ github.com/polarismesh/grpc-go-polaris v0.0.0-20211128162137-1a59cd7b5733 h1:Vik github.com/polarismesh/grpc-go-polaris v0.0.0-20211128162137-1a59cd7b5733/go.mod h1:remwVvDJRLPTpZjIiOkaD8ck2/1hFE1Fo5xxZ7AY5jY= github.com/polarismesh/grpc-go-polaris v1.2.0 h1:dcQyyGy1TwUDEehx4xvpKIl6RM/Mcp9N02qZmeH8OSQ= github.com/polarismesh/grpc-go-polaris v1.2.0/go.mod h1:bQ591/6rNXmo+tKTy7tc0PLgAro/3U+IJOpmubqcHDw= +github.com/polarismesh/grpc-go-polaris v1.2.1-0.20220306155244-f0b83ba62878 h1:IhlY8X1AZT33oB920PES1L/SPURx+tjb62nWHZ7s0Ss= +github.com/polarismesh/grpc-go-polaris v1.2.1-0.20220306155244-f0b83ba62878/go.mod h1:DxKBmYOXsLNqbrMqJgwnGwu9RkqWl005kXosGaVxbTg= github.com/polarismesh/polaris-go v1.0.0 h1:JIBANM5nfhu5knbg269kldQ58bSSV7a6AzTQk1OZwt8= github.com/polarismesh/polaris-go v1.0.0/go.mod h1:uzNFDShCN+UhBncwwNqNVhPpI1ZXYwPlb9N/aE+/vE0= +github.com/polarismesh/polaris-go v1.0.1 h1:Zqr8ZtxsJQsxt0MGyC/fFsF861ogoJCz16yWFJ/t54Q= +github.com/polarismesh/polaris-go v1.0.1/go.mod h1:3NOqn3QquPdEdY6YhPrsWGvBVCpKhPBGt0Hspq3yEqY= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -523,6 +535,8 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= From 8003b1b68df65d5e542207a86007fc43882042d6 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 7 Mar 2022 20:52:19 +0800 Subject: [PATCH 02/41] update gin version --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 7295e52..94b2eb7 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/dtm-labs/dtmdriver-gozero v0.0.2 github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 - github.com/gin-gonic/gin v1.7.0 + github.com/gin-gonic/gin v1.7.7 github.com/go-redis/redis/v8 v8.11.4 github.com/go-resty/resty/v2 v2.7.0 github.com/go-sql-driver/mysql v1.6.0 diff --git a/go.sum b/go.sum index c28bc04..0b7fc56 100644 --- a/go.sum +++ b/go.sum @@ -156,6 +156,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= +github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= From a4e32544b46b5ec703cd5732dc5e54ad6639d69d Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Tue, 8 Mar 2022 16:08:17 +0800 Subject: [PATCH 03/41] docs: add explicit comments --- dtmcli/dtmimp/consts.go | 3 ++ dtmcli/dtmimp/trans_base.go | 12 ++++---- go.sum | 59 ++----------------------------------- 3 files changed, 11 insertions(+), 63 deletions(-) diff --git a/dtmcli/dtmimp/consts.go b/dtmcli/dtmimp/consts.go index f17bccb..673289e 100644 --- a/dtmcli/dtmimp/consts.go +++ b/dtmcli/dtmimp/consts.go @@ -8,10 +8,13 @@ package dtmimp const ( // ResultFailure for result of a trans/trans branch + // Same as HTTP status 200 and GRPC code 0 ResultFailure = "FAILURE" // ResultSuccess for result of a trans/trans branch + // Same as HTTP status 409 and GRPC code 10 ResultSuccess = "SUCCESS" // ResultOngoing for result of a trans/trans branch + // Same as HTTP status 425 and GRPC code 9 ResultOngoing = "ONGOING" // DBTypeMysql const for driver mysql DBTypeMysql = "mysql" diff --git a/dtmcli/dtmimp/trans_base.go b/dtmcli/dtmimp/trans_base.go index fba19cc..7ddd578 100644 --- a/dtmcli/dtmimp/trans_base.go +++ b/dtmcli/dtmimp/trans_base.go @@ -43,12 +43,12 @@ func (g *BranchIDGen) CurrentSubBranchID() string { // TransOptions transaction options type TransOptions struct { WaitResult bool `json:"wait_result,omitempty" gorm:"-"` - TimeoutToFail int64 `json:"timeout_to_fail,omitempty" gorm:"-"` // for trans type: xa, tcc - RequestTimeout int64 `json:"requestTimeout" gorm:"-"` // for global trans resets request timeout - RetryInterval int64 `json:"retry_interval,omitempty" gorm:"-"` // for trans type: msg saga xa tcc + TimeoutToFail int64 `json:"timeout_to_fail,omitempty" gorm:"-"` // for trans type: xa, tcc, unit: second + RequestTimeout int64 `json:"requestTimeout" gorm:"-"` // for global trans resets request timeout, unit: second + RetryInterval int64 `json:"retry_interval,omitempty" gorm:"-"` // for trans type: msg saga xa tcc, unit: second PassthroughHeaders []string `json:"passthrough_headers,omitempty" gorm:"-"` - BranchHeaders map[string]string `json:"branch_headers,omitempty" gorm:"-"` - Concurrent bool `json:"concurrent" gorm:"-"` // for trans type: saga msg + BranchHeaders map[string]string `json:"branch_headers,omitempty" gorm:"-"` // custom branch headers, dtm server => service api + Concurrent bool `json:"concurrent" gorm:"-"` // for trans type: saga msg } // TransBase base for all trans @@ -62,7 +62,7 @@ type TransBase struct { Steps []map[string]string `json:"steps,omitempty"` // use in MSG/SAGA Payloads []string `json:"payloads,omitempty"` // used in MSG/SAGA BinPayloads [][]byte `json:"-"` - BranchIDGen `json:"-"` // used in XA/TCC + BranchIDGen `json:"-"` // used in XA/TCC Op string `json:"-"` // used in XA/TCC QueryPrepared string `json:"query_prepared,omitempty"` // used in MSG diff --git a/go.sum b/go.sum index 2564071..062472b 100644 --- a/go.sum +++ b/go.sum @@ -44,9 +44,7 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= github.com/agiledragon/gomonkey v0.0.0-20190517145658-8fa491f7b918 h1:a88Ln+jbIokfi6xoKtq10dbgp4VMg1CmHF1J42p8EyE= github.com/agiledragon/gomonkey v0.0.0-20190517145658-8fa491f7b918/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= @@ -56,10 +54,8 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= -github.com/alicebob/miniredis/v2 v2.16.0/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODVXVpYDRaGhWaL6I= github.com/alicebob/miniredis/v2 v2.17.0/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODVXVpYDRaGhWaL6I= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -96,7 +92,6 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -109,24 +104,18 @@ github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dtm-labs/dtmdriver v0.0.1 h1:dHUZQ6g2ZN6eRUqds9kKq/3K7u9bcUGatUlbthD92fA= github.com/dtm-labs/dtmdriver v0.0.1/go.mod h1:fLiEeD2BPwM9Yq96TfcP9KpbTwFsn5nTxa/PP0jmFuk= -github.com/dtm-labs/dtmdriver-gozero v0.0.1 h1:ExDhMsn3MJCd+psSmIJVDgGUqbFrQGP0IpKL8x900AE= -github.com/dtm-labs/dtmdriver-gozero v0.0.1/go.mod h1:uIiAMkG/Vp4jvINk5XfVMT0mSCzRqIYyXgpmqAQfqbA= github.com/dtm-labs/dtmdriver-gozero v0.0.2 h1:T+JH9kwVNMmISPU1BNviiTrvPdMA7UMFD+nfTqGPSyA= github.com/dtm-labs/dtmdriver-gozero v0.0.2/go.mod h1:5AAKwYok5f56e0kATOXvc+DAsfu4elISDuCV+G3+fYE= -github.com/dtm-labs/dtmdriver-polaris v0.0.2 h1:bh8u7bLWhairwpiA688dZMAX/OWcRoQk7a5bVcGzsjo= -github.com/dtm-labs/dtmdriver-polaris v0.0.2/go.mod h1:vyXDTRj3CpROiRnI0dqM/lHFfZaKY9JAS1MSey2azIQ= github.com/dtm-labs/dtmdriver-polaris v0.0.3 h1:oqvYq7X6iDUCECjSE82gsGP1Du0vhcpHNmxM8Uo7470= github.com/dtm-labs/dtmdriver-polaris v0.0.3/go.mod h1:yGdzgar7r8SmzTDeEn0CuVq9xo1NX7x327MhxuU9sxM= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1/go.mod h1:x3bRe8x7pAfHIIQBTK+LibVq96gBSzMzsgRYe85zxAc= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/proto v1.9.1/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -136,9 +125,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= @@ -163,13 +150,13 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -205,7 +192,6 @@ github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -235,7 +221,6 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -279,8 +264,6 @@ github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyyc github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= @@ -297,7 +280,6 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= @@ -396,25 +378,19 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg= -github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lithammer/shortuuid v2.0.3+incompatible h1:ao1r3cQ9AUX+c6dZXwbCM/ELGf10EoO4SyqqxBXTyHc= github.com/lithammer/shortuuid v2.0.3+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w= github.com/lithammer/shortuuid/v3 v3.0.7 h1:trX0KTHy4Pbwo/6ia8fscyHoGA+mf1jWbPJVuvyJQQ8= github.com/lithammer/shortuuid/v3 v3.0.7/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts= -github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= @@ -445,35 +421,28 @@ github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/openzipkin/zipkin-go v0.3.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ= github.com/openzipkin/zipkin-go v0.4.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polarismesh/grpc-go-polaris v0.0.0-20211128162137-1a59cd7b5733 h1:ViknokN0Hsv8OubVEMllicKWxuhyZ0ELY0fOIRecKrI= -github.com/polarismesh/grpc-go-polaris v0.0.0-20211128162137-1a59cd7b5733/go.mod h1:remwVvDJRLPTpZjIiOkaD8ck2/1hFE1Fo5xxZ7AY5jY= github.com/polarismesh/grpc-go-polaris v1.2.0 h1:dcQyyGy1TwUDEehx4xvpKIl6RM/Mcp9N02qZmeH8OSQ= github.com/polarismesh/grpc-go-polaris v1.2.0/go.mod h1:bQ591/6rNXmo+tKTy7tc0PLgAro/3U+IJOpmubqcHDw= github.com/polarismesh/polaris-go v1.0.0 h1:JIBANM5nfhu5knbg269kldQ58bSSV7a6AzTQk1OZwt8= @@ -498,7 +467,6 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -507,7 +475,6 @@ github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -530,7 +497,6 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -547,7 +513,6 @@ 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/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= @@ -562,8 +527,6 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -github.com/zeromicro/antlr v0.0.1/go.mod h1:nfpjEwFR6Q4xGDJMcZnCL9tEfQRgszMwu3rDz2Z+p5M= -github.com/zeromicro/ddl-parser v0.0.0-20210712021150-63520aca7348/go.mod h1:ISU/8NuPyEpl9pa17Py9TBPetMjtsiHrb9f5XGiYbo8= github.com/zeromicro/go-zero v1.3.0 h1:Eyn36yBtR043sm4YKmxR6eS3UA/GtZDktQ+UqIJ3Lm0= github.com/zeromicro/go-zero v1.3.0/go.mod h1:Hy4o1VFAt32lXaQMbaBhoFeZjA/rJqJ4PTGNdGsURcc= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= @@ -580,19 +543,12 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/otel v1.1.0 h1:8p0uMLcyyIx0KHNTgO8o3CW8A1aA+dJZJW6PvnMz0Wc= -go.opentelemetry.io/otel v1.1.0/go.mod h1:7cww0OW51jQ8IaZChIEdqLwgh+44+7uiTdWsAL0wQpA= go.opentelemetry.io/otel v1.3.0 h1:APxLf0eiBwLl+SOXiJJCVYzA1OOJNyAoV8C5RNRyy7Y= go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= -go.opentelemetry.io/otel/exporters/jaeger v1.1.0/go.mod h1:D/GIBwAdrFTTqCy1iITpC9nh5rgJpIbFVgkhlz2vCXk= go.opentelemetry.io/otel/exporters/jaeger v1.3.0/go.mod h1:KoYHi1BtkUPncGSRtCe/eh1ijsnePhSkxwzz07vU0Fc= -go.opentelemetry.io/otel/exporters/zipkin v1.1.0/go.mod h1:LZwDnf1mVGTPMq9hdRUHfFBH30SuQvZ1BJaVywpg0VI= go.opentelemetry.io/otel/exporters/zipkin v1.3.0/go.mod h1:LxGGfHIYbvsFnrJtBcazb0yG24xHdDGrT/H6RB9r3+8= -go.opentelemetry.io/otel/sdk v1.1.0 h1:j/1PngUJIDOddkCILQYTevrTIbWd494djgGkSsMit+U= -go.opentelemetry.io/otel/sdk v1.1.0/go.mod h1:3aQvM6uLm6C4wJpHtT8Od3vNzeZ34Pqc6bps8MywWzo= +go.opentelemetry.io/otel/sdk v1.3.0 h1:3278edCoH89MEJ0Ky8WQXVmDQv3FX4ZJ3Pp+9fJreAI= go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= -go.opentelemetry.io/otel/trace v1.1.0 h1:N25T9qCL0+7IpOT8RrRy0WYlL7y6U0WiUJzXcVdXY/o= -go.opentelemetry.io/otel/trace v1.1.0/go.mod h1:i47XtdcBQiktu5IsrPqOHe8w+sBmnLwwHt8wiUsWGTI= go.opentelemetry.io/otel/trace v1.3.0 h1:doy8Hzb1RJ+I3yFhtDmwNc7tIyw1tNMOIsyPzp1NOGY= go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -606,7 +562,6 @@ go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= go.uber.org/automaxprocs v1.4.1-0.20210525221652-0180b04c18a7 h1:dRxPYqUfp41vIUNfZhZRtI0TZf08Wf5BAwamC5H/DMI= go.uber.org/automaxprocs v1.4.1-0.20210525221652-0180b04c18a7/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= @@ -708,8 +663,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb h1:pirldcYWx7rx7kE5r+9WsOXPXK0+WH5+uZ7uPmJ44uM= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d h1:1n1fc535VhN8SYtD4cDUyNlfpAF2ROMM9+11equK3hs= golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -778,8 +731,6 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211106132015-ebca88c72f68 h1:Ywe/f3fNleF8I6F6qv3MeFoSZ6CTf2zBMMa/7qVML8M= -golang.org/x/sys v0.0.0-20211106132015-ebca88c72f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220111092808-5a964db01320 h1:0jf+tOCoZ3LyutmCOWpVni1chK4VfFLhRsDK7MhqGRY= golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -799,8 +750,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M= golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -891,8 +840,6 @@ google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9 h1:XTH066D35LyHehRwlYhoK3qA+Hcgvg5xREG4kFQEW1Y= -google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2 h1:z+R4M/SuyaRsj1zu3WC+nIQyfSrSIpuDcY01/R3uCtg= google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -906,7 +853,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= @@ -977,7 +923,6 @@ k8s.io/client-go v0.20.12 h1:U75SxTC31BHT9i7CbX/hL4v+U1Wkzy/E1vt5ClDPp3I= k8s.io/client-go v0.20.12/go.mod h1:NBJj6Evp73Xy/4v/O/RDRaH0+3JoxNfjRxkyRgrdbsA= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.40.1 h1:P4RRucWk/lFOlDdkAr3mc7iWFkgKrZY9qZMAgek06S4= k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= From 211498d08e5fb3d47e979473acc3698090e05815 Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Tue, 8 Mar 2022 16:28:01 +0800 Subject: [PATCH 04/41] docs: stop trigger recommend --- dtmcli/consts.go | 1 + 1 file changed, 1 insertion(+) diff --git a/dtmcli/consts.go b/dtmcli/consts.go index 814f17f..ef71a67 100644 --- a/dtmcli/consts.go +++ b/dtmcli/consts.go @@ -18,6 +18,7 @@ const ( // StatusSucceed status for global/branch trans status. StatusSucceed = "succeed" // StatusFailed status for global/branch trans status. + // NOTE: change global status to failed can stop trigger (Not recommended in production env) StatusFailed = "failed" // StatusAborting status for global trans status. StatusAborting = "aborting" From a1ce79067989483e90c8da192d28d2c5f4f99f9d Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Tue, 8 Mar 2022 18:57:02 +0800 Subject: [PATCH 05/41] docs: TransOptions comment --- dtmcli/dtmimp/consts.go | 4 ++-- dtmcli/dtmimp/trans_base.go | 16 ++++++++-------- dtmsvr/api_http.go | 1 + 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/dtmcli/dtmimp/consts.go b/dtmcli/dtmimp/consts.go index 673289e..1061a9f 100644 --- a/dtmcli/dtmimp/consts.go +++ b/dtmcli/dtmimp/consts.go @@ -8,10 +8,10 @@ package dtmimp const ( // ResultFailure for result of a trans/trans branch - // Same as HTTP status 200 and GRPC code 0 + // Same as HTTP status 409 and GRPC code 10 ResultFailure = "FAILURE" // ResultSuccess for result of a trans/trans branch - // Same as HTTP status 409 and GRPC code 10 + // Same as HTTP status 200 and GRPC code 0 ResultSuccess = "SUCCESS" // ResultOngoing for result of a trans/trans branch // Same as HTTP status 425 and GRPC code 9 diff --git a/dtmcli/dtmimp/trans_base.go b/dtmcli/dtmimp/trans_base.go index 7ddd578..56df136 100644 --- a/dtmcli/dtmimp/trans_base.go +++ b/dtmcli/dtmimp/trans_base.go @@ -43,20 +43,20 @@ func (g *BranchIDGen) CurrentSubBranchID() string { // TransOptions transaction options type TransOptions struct { WaitResult bool `json:"wait_result,omitempty" gorm:"-"` - TimeoutToFail int64 `json:"timeout_to_fail,omitempty" gorm:"-"` // for trans type: xa, tcc, unit: second - RequestTimeout int64 `json:"requestTimeout" gorm:"-"` // for global trans resets request timeout, unit: second - RetryInterval int64 `json:"retry_interval,omitempty" gorm:"-"` // for trans type: msg saga xa tcc, unit: second - PassthroughHeaders []string `json:"passthrough_headers,omitempty" gorm:"-"` - BranchHeaders map[string]string `json:"branch_headers,omitempty" gorm:"-"` // custom branch headers, dtm server => service api - Concurrent bool `json:"concurrent" gorm:"-"` // for trans type: saga msg + TimeoutToFail int64 `json:"timeout_to_fail,omitempty" gorm:"-"` // for trans type: xa, tcc, unit: second + RequestTimeout int64 `json:"requestTimeout" gorm:"-"` // for global trans resets request timeout, unit: second + RetryInterval int64 `json:"retry_interval,omitempty" gorm:"-"` // for trans type: msg saga xa tcc, unit: second + PassthroughHeaders []string `json:"passthrough_headers,omitempty" gorm:"-"` // for inherit the specified gin context headers + BranchHeaders map[string]string `json:"branch_headers,omitempty" gorm:"-"` // custom branch headers, dtm server => service api + Concurrent bool `json:"concurrent" gorm:"-"` // for trans type: saga msg } // TransBase base for all trans type TransBase struct { - Gid string `json:"gid"` + Gid string `json:"gid"` // NOTE: unique in storage, can customize the generation rules instead of using server-side generation, it will help with the tracking TransType string `json:"trans_type"` Dtm string `json:"-"` - CustomData string `json:"custom_data,omitempty"` + CustomData string `json:"custom_data,omitempty"` // nosql data persistence TransOptions Steps []map[string]string `json:"steps,omitempty"` // use in MSG/SAGA diff --git a/dtmsvr/api_http.go b/dtmsvr/api_http.go index 2d8dea0..3d2e67a 100644 --- a/dtmsvr/api_http.go +++ b/dtmsvr/api_http.go @@ -37,6 +37,7 @@ func addRoute(engine *gin.Engine) { }) } +// NOTE: unique in storage, can customize the generation rules instead of using server-side generation, it will help with the tracking func newGid(c *gin.Context) interface{} { return map[string]interface{}{"gid": GenGid(), "dtm_result": dtmcli.ResultSuccess} } From 73e670cc88c1f44e8d15b55f5c877acc9d5dafc7 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Tue, 8 Mar 2022 20:38:16 +0800 Subject: [PATCH 06/41] fix lint --- dtmcli/dtmimp/trans_base.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dtmcli/dtmimp/trans_base.go b/dtmcli/dtmimp/trans_base.go index 56df136..2dd14b3 100644 --- a/dtmcli/dtmimp/trans_base.go +++ b/dtmcli/dtmimp/trans_base.go @@ -62,7 +62,7 @@ type TransBase struct { Steps []map[string]string `json:"steps,omitempty"` // use in MSG/SAGA Payloads []string `json:"payloads,omitempty"` // used in MSG/SAGA BinPayloads [][]byte `json:"-"` - BranchIDGen `json:"-"` // used in XA/TCC + BranchIDGen `json:"-"` // used in XA/TCC Op string `json:"-"` // used in XA/TCC QueryPrepared string `json:"query_prepared,omitempty"` // used in MSG From dea0e5642e5fe323f32e288ea1b5e6194b49a9a9 Mon Sep 17 00:00:00 2001 From: Bei Date: Wed, 9 Mar 2022 17:28:05 +0800 Subject: [PATCH 07/41] fix typo of help information --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index bc7e2df..f0fcd98 100644 --- a/main.go +++ b/main.go @@ -44,7 +44,7 @@ func usage() { var isVersion = flag.Bool("v", false, "Show the version of dtm.") var isDebug = flag.Bool("d", false, "Set log level to debug.") -var isHelp = flag.Bool("h", false, "Show the help information about etcd.") +var isHelp = flag.Bool("h", false, "Show the help information about dtm.") var isReset = flag.Bool("r", false, "Reset dtm server data.") var confFile = flag.String("c", "", "Path to the server configuration file.") From c8ad5259d7dd6a7f0d8ff2d0585e396904a36467 Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Wed, 9 Mar 2022 19:55:07 +0800 Subject: [PATCH 08/41] =?UTF-8?q?feature:=20=E6=94=AF=E6=8C=81=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E5=81=9C=E6=AD=A2=E6=9C=AA=E6=88=90=E5=8A=9F=E7=9A=84?= =?UTF-8?q?gid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dtmcli/consts.go | 1 + dtmsvr/api.go | 18 ++++++++++++++++++ dtmsvr/api_http.go | 5 +++++ dtmsvr/storage/boltdb/boltdb.go | 17 +++++++++++++++++ dtmsvr/storage/redis/redis.go | 27 +++++++++++++++++++++++++++ dtmsvr/storage/sql/sql.go | 13 +++++++++++++ dtmsvr/storage/store.go | 1 + dtmsvr/storage/trans.go | 1 + dtmsvr/trans_status.go | 21 +++++++++++++++++++++ go.sum | 18 ------------------ sqls/dtmsvr.storage.mysql.sql | 2 +- 11 files changed, 105 insertions(+), 19 deletions(-) diff --git a/dtmcli/consts.go b/dtmcli/consts.go index ef71a67..f76fd84 100644 --- a/dtmcli/consts.go +++ b/dtmcli/consts.go @@ -12,6 +12,7 @@ import ( const ( // StatusPrepared status for global/branch trans status. + // first step, tx preparation period StatusPrepared = "prepared" // StatusSubmitted status for global trans status. StatusSubmitted = "submitted" diff --git a/dtmsvr/api.go b/dtmsvr/api.go index f2855f9..785be64 100644 --- a/dtmsvr/api.go +++ b/dtmsvr/api.go @@ -7,6 +7,7 @@ package dtmsvr import ( + "encoding/json" "fmt" "github.com/dtm-labs/dtm/dtmcli" @@ -58,6 +59,23 @@ func svcAbort(t *TransGlobal) interface{} { return dbt.Process(branches) } +func svcForceStop(t *TransGlobal) interface{} { + dbt := GetTransGlobal(t.Gid) + if dbt.Status == dtmcli.StatusSucceed || dbt.Status == dtmcli.StatusFailed { + return nil + } + extData, err := json.Marshal(&ExtData{ + Type: ExtDataTypeForceStop, + Msg: t.ForceStopReason, + }) + if err != nil { + return err + } + dbt.statusFailed(string(extData)) + branches := GetStore().FindBranches(t.Gid) + return dbt.Process(branches) +} + func svcRegisterBranch(transType string, branch *TransBranch, data map[string]string) error { branches := []TransBranch{*branch, *branch} if transType == "tcc" { diff --git a/dtmsvr/api_http.go b/dtmsvr/api_http.go index 3d2e67a..2ba8373 100644 --- a/dtmsvr/api_http.go +++ b/dtmsvr/api_http.go @@ -23,6 +23,7 @@ func addRoute(engine *gin.Engine) { engine.POST("/api/dtmsvr/prepare", dtmutil.WrapHandler2(prepare)) engine.POST("/api/dtmsvr/submit", dtmutil.WrapHandler2(submit)) engine.POST("/api/dtmsvr/abort", dtmutil.WrapHandler2(abort)) + engine.POST("/api/dtmsvr/forceStop", dtmutil.WrapHandler2(forceStop)) // change global status to failed can stop trigger (Use with caution in production environment) engine.POST("/api/dtmsvr/registerBranch", dtmutil.WrapHandler2(registerBranch)) engine.POST("/api/dtmsvr/registerXaBranch", dtmutil.WrapHandler2(registerBranch)) // compatible for old sdk engine.POST("/api/dtmsvr/registerTccBranch", dtmutil.WrapHandler2(registerBranch)) // compatible for old sdk @@ -54,6 +55,10 @@ func abort(c *gin.Context) interface{} { return svcAbort(TransFromContext(c)) } +func forceStop(c *gin.Context) interface{} { + return svcForceStop(TransFromContext(c)) +} + func registerBranch(c *gin.Context) interface{} { data := map[string]string{} err := c.BindJSON(&data) diff --git a/dtmsvr/storage/boltdb/boltdb.go b/dtmsvr/storage/boltdb/boltdb.go index 1f53fb2..0c38708 100644 --- a/dtmsvr/storage/boltdb/boltdb.go +++ b/dtmsvr/storage/boltdb/boltdb.go @@ -8,6 +8,7 @@ package boltdb import ( "fmt" + "github.com/dtm-labs/dtm/dtmcli" "strings" "time" @@ -26,6 +27,8 @@ type Store struct { retryInterval int64 } +var _ storage.Store = &Store{} + // NewStore will return the boltdb implement // TODO: change to options func NewStore(dataExpire int64, retryInterval int64) *Store { @@ -361,6 +364,20 @@ func (s *Store) ChangeGlobalStatus(global *storage.TransGlobalStore, newStatus s dtmimp.E2P(err) } +func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { + old := global.Status + global.Status = dtmcli.StatusFailed + err := s.boltDb.Update(func(t *bolt.Tx) error { + g := tGetGlobal(t, global.Gid) + if g == nil || g.Status != old { + return storage.ErrNotFound + } + tPutGlobal(t, global) + return nil + }) + dtmimp.E2P(err) +} + // TouchCronTime updates cronTime func (s *Store) TouchCronTime(global *storage.TransGlobalStore, nextCronInterval int64, nextCronTime *time.Time) { oldUnix := global.NextCronTime.Unix() diff --git a/dtmsvr/storage/redis/redis.go b/dtmsvr/storage/redis/redis.go index 7e6bbfa..0d86099 100644 --- a/dtmsvr/storage/redis/redis.go +++ b/dtmsvr/storage/redis/redis.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/dtm-labs/dtm/dtmcli" "sync" "time" @@ -26,6 +27,8 @@ var ctx = context.Background() type Store struct { } +var _ storage.Store = &Store{} + // Ping execs ping cmd to redis func (s *Store) Ping() error { _, err := redisGet().Ping(ctx).Result() @@ -229,6 +232,30 @@ end dtmimp.E2P(err) } +func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { + old := global.Status + global.Status = dtmcli.StatusFailed + args := newArgList(). + AppendGid(global.Gid). + AppendObject(global). + AppendRaw(old). + AppendRaw(false). + AppendRaw(global.Gid). + AppendRaw(dtmcli.StatusFailed) + _, err := callLua(args, `-- ChangeGlobalStatus +local old = redis.call('GET', KEYS[4]) +if old ~= ARGV[4] then + return 'NOT_FOUND' +end +redis.call('SET', KEYS[1], ARGV[3], 'EX', ARGV[2]) +redis.call('SET', KEYS[4], ARGV[7], 'EX', ARGV[2]) +if ARGV[5] == '1' then + redis.call('ZREM', KEYS[3], ARGV[6]) +end +`) + dtmimp.E2P(err) +} + // LockOneGlobalTrans finds GlobalTrans func (s *Store) LockOneGlobalTrans(expireIn time.Duration) *storage.TransGlobalStore { expired := time.Now().Add(expireIn).Unix() diff --git a/dtmsvr/storage/sql/sql.go b/dtmsvr/storage/sql/sql.go index d87297a..a4b8945 100644 --- a/dtmsvr/storage/sql/sql.go +++ b/dtmsvr/storage/sql/sql.go @@ -8,6 +8,7 @@ package sql import ( "fmt" + "github.com/dtm-labs/dtm/dtmcli" "math" "time" @@ -26,6 +27,8 @@ var conf = &config.Config type Store struct { } +var _ storage.Store = &Store{} + // Ping execs ping cmd to db func (s *Store) Ping() error { db, err := dtmimp.StandaloneDB(conf.Store.GetDBConf()) @@ -125,6 +128,16 @@ func (s *Store) ChangeGlobalStatus(global *storage.TransGlobalStore, newStatus s } } +// StatusFailed changes global trans status to failed +func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { + old := global.Status + global.Status = dtmcli.StatusFailed + dbr := dbGet().Must().Model(global).Where("status=? and gid=?", old, global.Gid).Select(updates).Updates(global) + if dbr.RowsAffected == 0 { + dtmimp.E2P(storage.ErrNotFound) + } +} + // TouchCronTime updates cronTime func (s *Store) TouchCronTime(global *storage.TransGlobalStore, nextCronInterval int64, nextCronTime *time.Time) { global.UpdateTime = dtmutil.GetNextTime(0) diff --git a/dtmsvr/storage/store.go b/dtmsvr/storage/store.go index 391c4dd..8a6c62a 100644 --- a/dtmsvr/storage/store.go +++ b/dtmsvr/storage/store.go @@ -28,6 +28,7 @@ type Store interface { LockGlobalSaveBranches(gid string, status string, branches []TransBranchStore, branchStart int) MaySaveNewTrans(global *TransGlobalStore, branches []TransBranchStore) error ChangeGlobalStatus(global *TransGlobalStore, newStatus string, updates []string, finished bool) + StatusFailed(global *TransGlobalStore, updates []string) TouchCronTime(global *TransGlobalStore, nextCronInterval int64, nextCronTime *time.Time) LockOneGlobalTrans(expireIn time.Duration) *TransGlobalStore ResetCronTime(timeout time.Duration, limit int64) (succeedCount int64, hasRemaining bool, err error) diff --git a/dtmsvr/storage/trans.go b/dtmsvr/storage/trans.go index 4f37122..ed80f6d 100644 --- a/dtmsvr/storage/trans.go +++ b/dtmsvr/storage/trans.go @@ -39,6 +39,7 @@ type TransGlobalStore struct { NextCronTime *time.Time `json:"next_cron_time,omitempty"` Owner string `json:"owner,omitempty"` Ext TransGlobalExt `json:"-" gorm:"-"` + ForceStopReason string `json:"force_stop_reason" gorm:"-"` ExtData string `json:"ext_data,omitempty"` // storage of ext. a db field to store many values. like Options dtmcli.TransOptions } diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 2c1c16a..6d27df2 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -58,6 +58,27 @@ func (t *TransGlobal) changeStatus(status string) { t.Status = status } +type ExtDataType string + +const ( + ExtDataTypeDefault ExtDataType = "" + ExtDataTypeForceStop ExtDataType = "forceStop" +) + +type ExtData struct { + Type ExtDataType `json:"type"` + Msg string `json:"msg"` +} + +func (t *TransGlobal) statusFailed(extData string) { + updates := []string{"status", "update_time", "ext_data"} + now := time.Now() + t.UpdateTime = &now + t.ExtData = extData + GetStore().StatusFailed(&t.TransGlobalStore, updates) + logger.Infof("StatusFailed to %s ok for %s", dtmcli.StatusFailed, t.TransGlobalStore.String()) +} + func (t *TransGlobal) changeBranchStatus(b *TransBranch, status string, branchPos int) { now := time.Now() b.Status = status diff --git a/go.sum b/go.sum index 814610b..17103b6 100644 --- a/go.sum +++ b/go.sum @@ -46,8 +46,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= -github.com/agiledragon/gomonkey v0.0.0-20190517145658-8fa491f7b918 h1:a88Ln+jbIokfi6xoKtq10dbgp4VMg1CmHF1J42p8EyE= -github.com/agiledragon/gomonkey v0.0.0-20190517145658-8fa491f7b918/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -108,8 +106,6 @@ github.com/dtm-labs/dtmdriver v0.0.1 h1:dHUZQ6g2ZN6eRUqds9kKq/3K7u9bcUGatUlbthD9 github.com/dtm-labs/dtmdriver v0.0.1/go.mod h1:fLiEeD2BPwM9Yq96TfcP9KpbTwFsn5nTxa/PP0jmFuk= github.com/dtm-labs/dtmdriver-gozero v0.0.2 h1:T+JH9kwVNMmISPU1BNviiTrvPdMA7UMFD+nfTqGPSyA= github.com/dtm-labs/dtmdriver-gozero v0.0.2/go.mod h1:5AAKwYok5f56e0kATOXvc+DAsfu4elISDuCV+G3+fYE= -github.com/dtm-labs/dtmdriver-polaris v0.0.3 h1:oqvYq7X6iDUCECjSE82gsGP1Du0vhcpHNmxM8Uo7470= -github.com/dtm-labs/dtmdriver-polaris v0.0.3/go.mod h1:yGdzgar7r8SmzTDeEn0CuVq9xo1NX7x327MhxuU9sxM= github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= github.com/dtm-labs/dtmdriver-polaris v0.0.4/go.mod h1:zwNFE3z0B7Ky35W2Ks9LkpMGiuIt9YFuocy4qaedCLE= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= @@ -141,8 +137,6 @@ github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= @@ -279,8 +273,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -413,7 +405,6 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= @@ -453,12 +444,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polarismesh/grpc-go-polaris v1.2.0 h1:dcQyyGy1TwUDEehx4xvpKIl6RM/Mcp9N02qZmeH8OSQ= -github.com/polarismesh/grpc-go-polaris v1.2.0/go.mod h1:bQ591/6rNXmo+tKTy7tc0PLgAro/3U+IJOpmubqcHDw= github.com/polarismesh/grpc-go-polaris v1.2.1-0.20220306155244-f0b83ba62878 h1:IhlY8X1AZT33oB920PES1L/SPURx+tjb62nWHZ7s0Ss= github.com/polarismesh/grpc-go-polaris v1.2.1-0.20220306155244-f0b83ba62878/go.mod h1:DxKBmYOXsLNqbrMqJgwnGwu9RkqWl005kXosGaVxbTg= -github.com/polarismesh/polaris-go v1.0.0 h1:JIBANM5nfhu5knbg269kldQ58bSSV7a6AzTQk1OZwt8= -github.com/polarismesh/polaris-go v1.0.0/go.mod h1:uzNFDShCN+UhBncwwNqNVhPpI1ZXYwPlb9N/aE+/vE0= github.com/polarismesh/polaris-go v1.0.1 h1:Zqr8ZtxsJQsxt0MGyC/fFsF861ogoJCz16yWFJ/t54Q= github.com/polarismesh/polaris-go v1.0.1/go.mod h1:3NOqn3QquPdEdY6YhPrsWGvBVCpKhPBGt0Hspq3yEqY= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -502,8 +489,6 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= -github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -582,7 +567,6 @@ go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpK go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.2.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -668,7 +652,6 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -861,7 +844,6 @@ google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2/go.mod h1:5CzLGKJ6 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= diff --git a/sqls/dtmsvr.storage.mysql.sql b/sqls/dtmsvr.storage.mysql.sql index 09c82f5..94050c0 100644 --- a/sqls/dtmsvr.storage.mysql.sql +++ b/sqls/dtmsvr.storage.mysql.sql @@ -15,7 +15,7 @@ CREATE TABLE if not EXISTS dtm.trans_global ( `finish_time` datetime DEFAULT NULL, `rollback_time` datetime DEFAULT NULL, `options` varchar(1024) DEFAULT '', - `custom_data` varchar(256) DEFAULT '', + `custom_data` varchar(256) DEFAULT '' COMMENT 'nosql json存储,用于记录一些策略', `next_cron_interval` int(11) default null comment '下次定时处理的间隔', `next_cron_time` datetime default null comment '下次定时处理的时间', `owner` varchar(128) not null default '' comment '正在处理全局事务的锁定者', From 8fd58a2601839793374a2787378bba0b7dd049a8 Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Wed, 9 Mar 2022 20:05:10 +0800 Subject: [PATCH 09/41] fix: lint and request param set --- dtmsvr/api.go | 1 + dtmsvr/storage/boltdb/boltdb.go | 1 + dtmsvr/storage/redis/redis.go | 1 + dtmsvr/storage/sql/sql.go | 2 +- dtmsvr/storage/trans.go | 2 +- dtmsvr/trans_status.go | 3 ++- 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/dtmsvr/api.go b/dtmsvr/api.go index 785be64..fbe7cf9 100644 --- a/dtmsvr/api.go +++ b/dtmsvr/api.go @@ -71,6 +71,7 @@ func svcForceStop(t *TransGlobal) interface{} { if err != nil { return err } + t.ForceStopReason = "" dbt.statusFailed(string(extData)) branches := GetStore().FindBranches(t.Gid) return dbt.Process(branches) diff --git a/dtmsvr/storage/boltdb/boltdb.go b/dtmsvr/storage/boltdb/boltdb.go index 0c38708..4a124d7 100644 --- a/dtmsvr/storage/boltdb/boltdb.go +++ b/dtmsvr/storage/boltdb/boltdb.go @@ -364,6 +364,7 @@ func (s *Store) ChangeGlobalStatus(global *storage.TransGlobalStore, newStatus s dtmimp.E2P(err) } +// StatusFailed change global trans status to failed with reason func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { old := global.Status global.Status = dtmcli.StatusFailed diff --git a/dtmsvr/storage/redis/redis.go b/dtmsvr/storage/redis/redis.go index 0d86099..3b63d0a 100644 --- a/dtmsvr/storage/redis/redis.go +++ b/dtmsvr/storage/redis/redis.go @@ -232,6 +232,7 @@ end dtmimp.E2P(err) } +// StatusFailed change global trans status to failed with reason func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { old := global.Status global.Status = dtmcli.StatusFailed diff --git a/dtmsvr/storage/sql/sql.go b/dtmsvr/storage/sql/sql.go index a4b8945..923b60c 100644 --- a/dtmsvr/storage/sql/sql.go +++ b/dtmsvr/storage/sql/sql.go @@ -128,7 +128,7 @@ func (s *Store) ChangeGlobalStatus(global *storage.TransGlobalStore, newStatus s } } -// StatusFailed changes global trans status to failed +// StatusFailed change global trans status to failed with reason func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { old := global.Status global.Status = dtmcli.StatusFailed diff --git a/dtmsvr/storage/trans.go b/dtmsvr/storage/trans.go index ed80f6d..b535065 100644 --- a/dtmsvr/storage/trans.go +++ b/dtmsvr/storage/trans.go @@ -39,7 +39,7 @@ type TransGlobalStore struct { NextCronTime *time.Time `json:"next_cron_time,omitempty"` Owner string `json:"owner,omitempty"` Ext TransGlobalExt `json:"-" gorm:"-"` - ForceStopReason string `json:"force_stop_reason" gorm:"-"` + ForceStopReason string `json:"force_stop_reason,omitempty" gorm:"-"` // only for request ExtData string `json:"ext_data,omitempty"` // storage of ext. a db field to store many values. like Options dtmcli.TransOptions } diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 6d27df2..70cd54a 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -58,13 +58,14 @@ func (t *TransGlobal) changeStatus(status string) { t.Status = status } +// ExtDataType case extData type type ExtDataType string const ( - ExtDataTypeDefault ExtDataType = "" ExtDataTypeForceStop ExtDataType = "forceStop" ) +// ExtData custom extData struct type ExtData struct { Type ExtDataType `json:"type"` Msg string `json:"msg"` From 819b49372965f34d2aa412097512877c8a586ddb Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Wed, 9 Mar 2022 20:11:53 +0800 Subject: [PATCH 10/41] docs: add comment --- dtmsvr/trans_status.go | 1 + 1 file changed, 1 insertion(+) diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 70cd54a..41ca28a 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -62,6 +62,7 @@ func (t *TransGlobal) changeStatus(status string) { type ExtDataType string const ( + // ExtDataTypeForceStop Type of user forced stop global gid ExtDataTypeForceStop ExtDataType = "forceStop" ) From ef7573b011ab3b2665906e94f06c6de550a36a99 Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Wed, 9 Mar 2022 20:27:08 +0800 Subject: [PATCH 11/41] fmt: import sort --- dtmsvr/storage/boltdb/boltdb.go | 2 +- dtmsvr/storage/redis/redis.go | 2 +- dtmsvr/storage/sql/sql.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dtmsvr/storage/boltdb/boltdb.go b/dtmsvr/storage/boltdb/boltdb.go index 4a124d7..8d1cb36 100644 --- a/dtmsvr/storage/boltdb/boltdb.go +++ b/dtmsvr/storage/boltdb/boltdb.go @@ -8,10 +8,10 @@ package boltdb import ( "fmt" - "github.com/dtm-labs/dtm/dtmcli" "strings" "time" + "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmcli/logger" "github.com/dtm-labs/dtm/dtmsvr/storage" diff --git a/dtmsvr/storage/redis/redis.go b/dtmsvr/storage/redis/redis.go index 3b63d0a..f3e08de 100644 --- a/dtmsvr/storage/redis/redis.go +++ b/dtmsvr/storage/redis/redis.go @@ -4,12 +4,12 @@ import ( "context" "errors" "fmt" - "github.com/dtm-labs/dtm/dtmcli" "sync" "time" "github.com/go-redis/redis/v8" + "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmcli/logger" "github.com/dtm-labs/dtm/dtmsvr/config" diff --git a/dtmsvr/storage/sql/sql.go b/dtmsvr/storage/sql/sql.go index 923b60c..0f10255 100644 --- a/dtmsvr/storage/sql/sql.go +++ b/dtmsvr/storage/sql/sql.go @@ -8,10 +8,10 @@ package sql import ( "fmt" - "github.com/dtm-labs/dtm/dtmcli" "math" "time" + "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmsvr/config" "github.com/dtm-labs/dtm/dtmsvr/storage" From 321ef28c8caec325b4e0656ccf9f8ba087acb7f1 Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Wed, 9 Mar 2022 20:50:18 +0800 Subject: [PATCH 12/41] refact: rm StatsFailed func --- dtmsvr/storage/boltdb/boltdb.go | 16 ---------------- dtmsvr/storage/redis/redis.go | 26 -------------------------- dtmsvr/storage/sql/sql.go | 11 ----------- dtmsvr/storage/store.go | 1 - dtmsvr/storage/trans.go | 2 +- dtmsvr/trans_status.go | 3 ++- 6 files changed, 3 insertions(+), 56 deletions(-) diff --git a/dtmsvr/storage/boltdb/boltdb.go b/dtmsvr/storage/boltdb/boltdb.go index 8d1cb36..83d234c 100644 --- a/dtmsvr/storage/boltdb/boltdb.go +++ b/dtmsvr/storage/boltdb/boltdb.go @@ -11,7 +11,6 @@ import ( "strings" "time" - "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmcli/logger" "github.com/dtm-labs/dtm/dtmsvr/storage" @@ -364,21 +363,6 @@ func (s *Store) ChangeGlobalStatus(global *storage.TransGlobalStore, newStatus s dtmimp.E2P(err) } -// StatusFailed change global trans status to failed with reason -func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { - old := global.Status - global.Status = dtmcli.StatusFailed - err := s.boltDb.Update(func(t *bolt.Tx) error { - g := tGetGlobal(t, global.Gid) - if g == nil || g.Status != old { - return storage.ErrNotFound - } - tPutGlobal(t, global) - return nil - }) - dtmimp.E2P(err) -} - // TouchCronTime updates cronTime func (s *Store) TouchCronTime(global *storage.TransGlobalStore, nextCronInterval int64, nextCronTime *time.Time) { oldUnix := global.NextCronTime.Unix() diff --git a/dtmsvr/storage/redis/redis.go b/dtmsvr/storage/redis/redis.go index f3e08de..d2cca87 100644 --- a/dtmsvr/storage/redis/redis.go +++ b/dtmsvr/storage/redis/redis.go @@ -9,7 +9,6 @@ import ( "github.com/go-redis/redis/v8" - "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmcli/logger" "github.com/dtm-labs/dtm/dtmsvr/config" @@ -232,31 +231,6 @@ end dtmimp.E2P(err) } -// StatusFailed change global trans status to failed with reason -func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { - old := global.Status - global.Status = dtmcli.StatusFailed - args := newArgList(). - AppendGid(global.Gid). - AppendObject(global). - AppendRaw(old). - AppendRaw(false). - AppendRaw(global.Gid). - AppendRaw(dtmcli.StatusFailed) - _, err := callLua(args, `-- ChangeGlobalStatus -local old = redis.call('GET', KEYS[4]) -if old ~= ARGV[4] then - return 'NOT_FOUND' -end -redis.call('SET', KEYS[1], ARGV[3], 'EX', ARGV[2]) -redis.call('SET', KEYS[4], ARGV[7], 'EX', ARGV[2]) -if ARGV[5] == '1' then - redis.call('ZREM', KEYS[3], ARGV[6]) -end -`) - dtmimp.E2P(err) -} - // LockOneGlobalTrans finds GlobalTrans func (s *Store) LockOneGlobalTrans(expireIn time.Duration) *storage.TransGlobalStore { expired := time.Now().Add(expireIn).Unix() diff --git a/dtmsvr/storage/sql/sql.go b/dtmsvr/storage/sql/sql.go index 0f10255..fa8bcdd 100644 --- a/dtmsvr/storage/sql/sql.go +++ b/dtmsvr/storage/sql/sql.go @@ -11,7 +11,6 @@ import ( "math" "time" - "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmsvr/config" "github.com/dtm-labs/dtm/dtmsvr/storage" @@ -128,16 +127,6 @@ func (s *Store) ChangeGlobalStatus(global *storage.TransGlobalStore, newStatus s } } -// StatusFailed change global trans status to failed with reason -func (s *Store) StatusFailed(global *storage.TransGlobalStore, updates []string) { - old := global.Status - global.Status = dtmcli.StatusFailed - dbr := dbGet().Must().Model(global).Where("status=? and gid=?", old, global.Gid).Select(updates).Updates(global) - if dbr.RowsAffected == 0 { - dtmimp.E2P(storage.ErrNotFound) - } -} - // TouchCronTime updates cronTime func (s *Store) TouchCronTime(global *storage.TransGlobalStore, nextCronInterval int64, nextCronTime *time.Time) { global.UpdateTime = dtmutil.GetNextTime(0) diff --git a/dtmsvr/storage/store.go b/dtmsvr/storage/store.go index 8a6c62a..391c4dd 100644 --- a/dtmsvr/storage/store.go +++ b/dtmsvr/storage/store.go @@ -28,7 +28,6 @@ type Store interface { LockGlobalSaveBranches(gid string, status string, branches []TransBranchStore, branchStart int) MaySaveNewTrans(global *TransGlobalStore, branches []TransBranchStore) error ChangeGlobalStatus(global *TransGlobalStore, newStatus string, updates []string, finished bool) - StatusFailed(global *TransGlobalStore, updates []string) TouchCronTime(global *TransGlobalStore, nextCronInterval int64, nextCronTime *time.Time) LockOneGlobalTrans(expireIn time.Duration) *TransGlobalStore ResetCronTime(timeout time.Duration, limit int64) (succeedCount int64, hasRemaining bool, err error) diff --git a/dtmsvr/storage/trans.go b/dtmsvr/storage/trans.go index b535065..07a06ba 100644 --- a/dtmsvr/storage/trans.go +++ b/dtmsvr/storage/trans.go @@ -40,7 +40,7 @@ type TransGlobalStore struct { Owner string `json:"owner,omitempty"` Ext TransGlobalExt `json:"-" gorm:"-"` ForceStopReason string `json:"force_stop_reason,omitempty" gorm:"-"` // only for request - ExtData string `json:"ext_data,omitempty"` // storage of ext. a db field to store many values. like Options + ExtData string `json:"ext_data,omitempty"` // storage of ext. a db field to store many values. like Options dtmcli.TransOptions } diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 41ca28a..8952d17 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -77,8 +77,9 @@ func (t *TransGlobal) statusFailed(extData string) { now := time.Now() t.UpdateTime = &now t.ExtData = extData - GetStore().StatusFailed(&t.TransGlobalStore, updates) + GetStore().ChangeGlobalStatus(&t.TransGlobalStore, dtmcli.StatusFailed, updates, false) logger.Infof("StatusFailed to %s ok for %s", dtmcli.StatusFailed, t.TransGlobalStore.String()) + t.Status = dtmcli.StatusFailed } func (t *TransGlobal) changeBranchStatus(b *TransBranch, status string, branchPos int) { From d94e56642c095b17c5a7e6d51696f51524f597bc Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Wed, 9 Mar 2022 21:46:28 +0800 Subject: [PATCH 13/41] =?UTF-8?q?fix:=20test-cover.sh=20=E6=8E=92=E9=99=A4?= =?UTF-8?q?test=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- helper/test-cover.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 helper/test-cover.sh diff --git a/helper/test-cover.sh b/helper/test-cover.sh old mode 100644 new mode 100755 index 13bd654..d1a3d26 --- a/helper/test-cover.sh +++ b/helper/test-cover.sh @@ -1,7 +1,7 @@ set -x echo "" > coverage.txt for store in redis mysql boltdb; do - for d in $(go list ./... | grep -v vendor); do + for d in $(go list ./... | grep -v vendor | grep -v test); do TEST_STORE=$store go test -covermode count -coverprofile=profile.out -coverpkg=github.com/dtm-labs/dtm/dtmcli,github.com/dtm-labs/dtm/dtmcli/dtmimp,github.com/dtm-labs/dtm/dtmcli/logger,github.com/dtm-labs/dtm/dtmgrpc,github.com/dtm-labs/dtm/dtmgrpc/dtmgimp,github.com/dtm-labs/dtm/dtmsvr,github.com/dtm-labs/dtm/dtmsvr/config,github.com/dtm-labs/dtm/dtmsvr/storage,github.com/dtm-labs/dtm/dtmsvr/storage/boltdb,github.com/dtm-labs/dtm/dtmsvr/storage/redis,github.com/dtm-labs/dtm/dtmsvr/storage/registry,github.com/dtm-labs/dtm/dtmsvr/storage/sql,github.com/dtm-labs/dtm/dtmutil -gcflags=-l $d || exit 1 if [ -f profile.out ]; then cat profile.out >> coverage.txt From 38e05c48ba672a5ca43ed2d0ef2d5aa28fabcd47 Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Fri, 11 Mar 2022 19:47:39 +0800 Subject: [PATCH 14/41] =?UTF-8?q?refact:=20=E5=BC=BA=E5=88=B6=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E4=B8=8D=E8=AE=B0=E5=BD=95=E5=8E=9F=E5=9B=A0=E5=88=B0?= =?UTF-8?q?extData=E4=B8=AD=EF=BC=8C=E4=B9=8B=E5=90=8E=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=80=83=E8=99=91=E5=A6=82=E4=BD=95=E5=8C=BA=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dtmsvr/api.go | 11 +---------- dtmsvr/storage/trans.go | 1 - dtmsvr/trans_status.go | 19 ++----------------- 3 files changed, 3 insertions(+), 28 deletions(-) diff --git a/dtmsvr/api.go b/dtmsvr/api.go index fbe7cf9..b2dbefa 100644 --- a/dtmsvr/api.go +++ b/dtmsvr/api.go @@ -7,7 +7,6 @@ package dtmsvr import ( - "encoding/json" "fmt" "github.com/dtm-labs/dtm/dtmcli" @@ -64,15 +63,7 @@ func svcForceStop(t *TransGlobal) interface{} { if dbt.Status == dtmcli.StatusSucceed || dbt.Status == dtmcli.StatusFailed { return nil } - extData, err := json.Marshal(&ExtData{ - Type: ExtDataTypeForceStop, - Msg: t.ForceStopReason, - }) - if err != nil { - return err - } - t.ForceStopReason = "" - dbt.statusFailed(string(extData)) + dbt.statusFailed() branches := GetStore().FindBranches(t.Gid) return dbt.Process(branches) } diff --git a/dtmsvr/storage/trans.go b/dtmsvr/storage/trans.go index 07a06ba..789ba0c 100644 --- a/dtmsvr/storage/trans.go +++ b/dtmsvr/storage/trans.go @@ -39,7 +39,6 @@ type TransGlobalStore struct { NextCronTime *time.Time `json:"next_cron_time,omitempty"` Owner string `json:"owner,omitempty"` Ext TransGlobalExt `json:"-" gorm:"-"` - ForceStopReason string `json:"force_stop_reason,omitempty" gorm:"-"` // only for request ExtData string `json:"ext_data,omitempty"` // storage of ext. a db field to store many values. like Options dtmcli.TransOptions } diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 8952d17..876703b 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -58,25 +58,10 @@ func (t *TransGlobal) changeStatus(status string) { t.Status = status } -// ExtDataType case extData type -type ExtDataType string - -const ( - // ExtDataTypeForceStop Type of user forced stop global gid - ExtDataTypeForceStop ExtDataType = "forceStop" -) - -// ExtData custom extData struct -type ExtData struct { - Type ExtDataType `json:"type"` - Msg string `json:"msg"` -} - -func (t *TransGlobal) statusFailed(extData string) { - updates := []string{"status", "update_time", "ext_data"} +func (t *TransGlobal) statusFailed() { + updates := []string{"status", "update_time"} now := time.Now() t.UpdateTime = &now - t.ExtData = extData GetStore().ChangeGlobalStatus(&t.TransGlobalStore, dtmcli.StatusFailed, updates, false) logger.Infof("StatusFailed to %s ok for %s", dtmcli.StatusFailed, t.TransGlobalStore.String()) t.Status = dtmcli.StatusFailed From a754a0cabcd7dc8a6b8b669d634e180c8ba812fa Mon Sep 17 00:00:00 2001 From: Rennbon <343688972@qq.com> Date: Fri, 11 Mar 2022 20:54:07 +0800 Subject: [PATCH 15/41] feature: add makefile --- Makefile | 23 +++++++++++++++++++++++ dtmsvr/storage/trans.go | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0096486 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +# dev env https://www.dtm.pub/other/develop.html +all: fmt lint test_all cover_test +.PHONY: all + +fmt: + @gofmt -s -w ./ + +lint: + @golangci-lint run + +.PHONY: test +test: + @go test ./... + +test_all: + TEST_STORE=redis go test ./... + TEST_STORE=boltdb go test ./... + TEST_STORE=mysql go test ./... + TEST_STORE=postgres go test ./... + +cover_test: + ./helper/test-cover.sh + diff --git a/dtmsvr/storage/trans.go b/dtmsvr/storage/trans.go index 789ba0c..4f37122 100644 --- a/dtmsvr/storage/trans.go +++ b/dtmsvr/storage/trans.go @@ -39,7 +39,7 @@ type TransGlobalStore struct { NextCronTime *time.Time `json:"next_cron_time,omitempty"` Owner string `json:"owner,omitempty"` Ext TransGlobalExt `json:"-" gorm:"-"` - ExtData string `json:"ext_data,omitempty"` // storage of ext. a db field to store many values. like Options + ExtData string `json:"ext_data,omitempty"` // storage of ext. a db field to store many values. like Options dtmcli.TransOptions } From 830ac1ede8f938c239b80bc60bf792ef0485010a Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Fri, 11 Mar 2022 21:28:20 +0800 Subject: [PATCH 16/41] refactor forceStop --- Makefile | 23 ----------------------- dtmsvr/api.go | 7 +++---- dtmsvr/storage/boltdb/boltdb.go | 2 -- dtmsvr/storage/redis/redis.go | 2 -- dtmsvr/storage/sql/sql.go | 2 -- dtmsvr/trans_status.go | 9 --------- test/api_test.go | 31 +++++++++++++++++++++++++++++++ 7 files changed, 34 insertions(+), 42 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 0096486..0000000 --- a/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# dev env https://www.dtm.pub/other/develop.html -all: fmt lint test_all cover_test -.PHONY: all - -fmt: - @gofmt -s -w ./ - -lint: - @golangci-lint run - -.PHONY: test -test: - @go test ./... - -test_all: - TEST_STORE=redis go test ./... - TEST_STORE=boltdb go test ./... - TEST_STORE=mysql go test ./... - TEST_STORE=postgres go test ./... - -cover_test: - ./helper/test-cover.sh - diff --git a/dtmsvr/api.go b/dtmsvr/api.go index b2dbefa..5c3d118 100644 --- a/dtmsvr/api.go +++ b/dtmsvr/api.go @@ -61,11 +61,10 @@ func svcAbort(t *TransGlobal) interface{} { func svcForceStop(t *TransGlobal) interface{} { dbt := GetTransGlobal(t.Gid) if dbt.Status == dtmcli.StatusSucceed || dbt.Status == dtmcli.StatusFailed { - return nil + return fmt.Errorf("global transaction force stop error. status: %s. error: %w", dbt.Status, dtmcli.ErrFailure) } - dbt.statusFailed() - branches := GetStore().FindBranches(t.Gid) - return dbt.Process(branches) + dbt.changeStatus(dtmcli.StatusFailed) + return nil } func svcRegisterBranch(transType string, branch *TransBranch, data map[string]string) error { diff --git a/dtmsvr/storage/boltdb/boltdb.go b/dtmsvr/storage/boltdb/boltdb.go index 83d234c..1f53fb2 100644 --- a/dtmsvr/storage/boltdb/boltdb.go +++ b/dtmsvr/storage/boltdb/boltdb.go @@ -26,8 +26,6 @@ type Store struct { retryInterval int64 } -var _ storage.Store = &Store{} - // NewStore will return the boltdb implement // TODO: change to options func NewStore(dataExpire int64, retryInterval int64) *Store { diff --git a/dtmsvr/storage/redis/redis.go b/dtmsvr/storage/redis/redis.go index d2cca87..7e6bbfa 100644 --- a/dtmsvr/storage/redis/redis.go +++ b/dtmsvr/storage/redis/redis.go @@ -26,8 +26,6 @@ var ctx = context.Background() type Store struct { } -var _ storage.Store = &Store{} - // Ping execs ping cmd to redis func (s *Store) Ping() error { _, err := redisGet().Ping(ctx).Result() diff --git a/dtmsvr/storage/sql/sql.go b/dtmsvr/storage/sql/sql.go index fa8bcdd..d87297a 100644 --- a/dtmsvr/storage/sql/sql.go +++ b/dtmsvr/storage/sql/sql.go @@ -26,8 +26,6 @@ var conf = &config.Config type Store struct { } -var _ storage.Store = &Store{} - // Ping execs ping cmd to db func (s *Store) Ping() error { db, err := dtmimp.StandaloneDB(conf.Store.GetDBConf()) diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 876703b..2c1c16a 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -58,15 +58,6 @@ func (t *TransGlobal) changeStatus(status string) { t.Status = status } -func (t *TransGlobal) statusFailed() { - updates := []string{"status", "update_time"} - now := time.Now() - t.UpdateTime = &now - GetStore().ChangeGlobalStatus(&t.TransGlobalStore, dtmcli.StatusFailed, updates, false) - logger.Infof("StatusFailed to %s ok for %s", dtmcli.StatusFailed, t.TransGlobalStore.String()) - t.Status = dtmcli.StatusFailed -} - func (t *TransGlobal) changeBranchStatus(b *TransBranch, status string, branchPos int) { now := time.Now() b.Status = status diff --git a/test/api_test.go b/test/api_test.go index 54e869d..ff3d5d6 100644 --- a/test/api_test.go +++ b/test/api_test.go @@ -8,11 +8,13 @@ package test import ( "fmt" + "net/http" "strconv" "testing" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmutil" + "github.com/dtm-labs/dtm/test/busi" "github.com/stretchr/testify/assert" ) @@ -100,3 +102,32 @@ func TestAPIResetCronTime(t *testing.T) { return int64(succeedCount), hasRemaining, err }) } + +func TestAPIForceStoppedNormal(t *testing.T) { + saga := genSaga(dtmimp.GetFuncName(), false, false) + busi.MainSwitch.TransOutResult.SetOnce("ONGOING") + saga.Submit() + waitTransProcessed(saga.Gid) + assert.Equal(t, StatusSubmitted, getTransStatus(saga.Gid)) + + resp, err := dtmimp.RestyClient.R().SetBody(map[string]string{ + "gid": saga.Gid, + }).Post(dtmutil.DefaultHTTPServer + "/forceStop") + assert.Nil(t, err) + assert.Equal(t, resp.StatusCode(), http.StatusOK) + assert.Equal(t, StatusFailed, getTransStatus(saga.Gid)) +} + +func TestAPIForceStoppedAbnormal(t *testing.T) { + saga := genSaga(dtmimp.GetFuncName(), false, false) + saga.Submit() + waitTransProcessed(saga.Gid) + assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid)) + assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid)) + + resp, err := dtmimp.RestyClient.R().SetBody(map[string]string{ + "gid": saga.Gid, + }).Post(dtmutil.DefaultHTTPServer + "/forceStop") + assert.Nil(t, err) + assert.Equal(t, resp.StatusCode(), http.StatusConflict) +} From 61860d1a96ec598e48c1ea65a55994dc2b10dc78 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Fri, 11 Mar 2022 21:28:40 +0800 Subject: [PATCH 17/41] move makefile to helper --- helper/Makefile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 helper/Makefile diff --git a/helper/Makefile b/helper/Makefile new file mode 100644 index 0000000..0096486 --- /dev/null +++ b/helper/Makefile @@ -0,0 +1,23 @@ +# dev env https://www.dtm.pub/other/develop.html +all: fmt lint test_all cover_test +.PHONY: all + +fmt: + @gofmt -s -w ./ + +lint: + @golangci-lint run + +.PHONY: test +test: + @go test ./... + +test_all: + TEST_STORE=redis go test ./... + TEST_STORE=boltdb go test ./... + TEST_STORE=mysql go test ./... + TEST_STORE=postgres go test ./... + +cover_test: + ./helper/test-cover.sh + From 8e36891b891a0f11b8f9058b17f9b80c0b3efe48 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Fri, 11 Mar 2022 21:41:36 +0800 Subject: [PATCH 18/41] update makefile --- helper/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/helper/Makefile b/helper/Makefile index 0096486..f9d7353 100644 --- a/helper/Makefile +++ b/helper/Makefile @@ -1,5 +1,5 @@ # dev env https://www.dtm.pub/other/develop.html -all: fmt lint test_all cover_test +all: fmt lint test_redis .PHONY: all fmt: @@ -12,6 +12,9 @@ lint: test: @go test ./... +test_redis: + TEST_STORE=redis go test ./... + test_all: TEST_STORE=redis go test ./... TEST_STORE=boltdb go test ./... From 351b61030a394ac48c60c59b6e518ab8f3a150c2 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 14 Mar 2022 15:01:19 +0800 Subject: [PATCH 19/41] change to en for sql --- sqls/dtmsvr.storage.mysql.sql | 39 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/sqls/dtmsvr.storage.mysql.sql b/sqls/dtmsvr.storage.mysql.sql index 94050c0..0aadf98 100644 --- a/sqls/dtmsvr.storage.mysql.sql +++ b/sqls/dtmsvr.storage.mysql.sql @@ -4,37 +4,36 @@ CREATE DATABASE IF NOT EXISTS dtm drop table IF EXISTS dtm.trans_global; CREATE TABLE if not EXISTS dtm.trans_global ( `id` bigint(22) NOT NULL AUTO_INCREMENT, - `gid` varchar(128) NOT NULL COMMENT '事务全局id', - `trans_type` varchar(45) not null COMMENT '事务类型: saga | xa | tcc | msg', - -- `data` TEXT COMMENT '事务携带的数据', -- 影响性能,不必要存储 - `status` varchar(12) NOT NULL COMMENT '全局事务的状态 prepared | submitted | aborting | finished | rollbacked', - `query_prepared` varchar(128) NOT NULL COMMENT 'prepared状态事务的查询api', - `protocol` varchar(45) not null comment '通信协议 http | grpc', + `gid` varchar(128) NOT NULL COMMENT 'global transaction id', + `trans_type` varchar(45) not null COMMENT 'transaction type: saga | xa | tcc | msg', + `status` varchar(12) NOT NULL COMMENT 'tranaction status: prepared | submitted | aborting | finished | rollbacked', + `query_prepared` varchar(128) NOT NULL COMMENT 'url to check for 2-phase message', + `protocol` varchar(45) not null comment 'protocol: http | grpc | json-rpc', `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, `finish_time` datetime DEFAULT NULL, `rollback_time` datetime DEFAULT NULL, - `options` varchar(1024) DEFAULT '', - `custom_data` varchar(256) DEFAULT '' COMMENT 'nosql json存储,用于记录一些策略', - `next_cron_interval` int(11) default null comment '下次定时处理的间隔', - `next_cron_time` datetime default null comment '下次定时处理的时间', - `owner` varchar(128) not null default '' comment '正在处理全局事务的锁定者', - `ext_data` TEXT comment 'global扩展字段的数据', + `options` varchar(1024) DEFAULT 'options for transaction like: TimeoutToFail, RequestTimeout', + `custom_data` varchar(256) DEFAULT '' COMMENT 'custom data for transaction', + `next_cron_interval` int(11) default null comment 'next cron interval. for use of cron job', + `next_cron_time` datetime default null comment 'next time to process this trans. for use of cron job', + `owner` varchar(128) not null default '' comment 'who is locking this trans', + `ext_data` TEXT comment 'extended data for this trans', PRIMARY KEY (`id`), UNIQUE KEY `gid` (`gid`), key `owner`(`owner`), - key `status_next_cron_time` (`status`, `next_cron_time`) comment '这个索引用于查询超时的全局事务,能够合理的走索引' + key `status_next_cron_time` (`status`, `next_cron_time`) comment 'cron job will use this index to query trans' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; drop table IF EXISTS dtm.trans_branch_op; CREATE TABLE IF NOT EXISTS dtm.trans_branch_op ( `id` bigint(22) NOT NULL AUTO_INCREMENT, - `gid` varchar(128) NOT NULL COMMENT '事务全局id', - `url` varchar(128) NOT NULL COMMENT '动作关联的url', - `data` TEXT COMMENT '请求所携带的数据', - `bin_data` BLOB COMMENT 'grpc的二进制数据', - `branch_id` VARCHAR(128) NOT NULL COMMENT '事务分支ID', - `op` varchar(45) NOT NULL COMMENT '事务分支类型 saga_action | saga_compensate | xa', - `status` varchar(45) NOT NULL COMMENT '步骤的状态 submitted | finished | rollbacked', + `gid` varchar(128) NOT NULL COMMENT 'global transaction id', + `url` varchar(128) NOT NULL COMMENT 'the url of this op', + `data` TEXT COMMENT 'request body, depreceated', + `bin_data` BLOB COMMENT 'request body', + `branch_id` VARCHAR(128) NOT NULL COMMENT 'transaction branch ID', + `op` varchar(45) NOT NULL COMMENT 'transaction operation type like: action | compensate | try | confirm | cancel', + `status` varchar(45) NOT NULL COMMENT 'transaction op status: prepared | succeed | failed', `finish_time` datetime DEFAULT NULL, `rollback_time` datetime DEFAULT NULL, `create_time` datetime DEFAULT NULL, From 419b76c932a6f9e56bf95a3403be0e912f6eafdb Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 14 Mar 2022 15:26:46 +0800 Subject: [PATCH 20/41] change to en --- dtmcli/barrier.go | 6 +++--- dtmcli/dtmimp/README-cn.md | 2 ++ dtmcli/dtmimp/README.md | 4 ++-- dtmcli/dtmimp/trans_xa_base.go | 3 +-- dtmcli/tcc.go | 3 +-- dtmcli/xa.go | 2 +- dtmgrpc/dtmgimp/README-cn.md | 2 ++ dtmgrpc/dtmgimp/README.md | 4 ++-- dtmgrpc/dtmgimp/types.go | 4 ++-- dtmgrpc/tcc.go | 7 +++--- dtmgrpc/xa.go | 2 +- dtmsvr/config/config.go | 2 +- dtmsvr/storage/sql/sql.go | 2 +- dtmsvr/trans_status.go | 2 +- dtmutil/db.go | 4 ++-- dtmutil/utils.go | 2 +- helper/bench/main.go | 6 +++--- main.go | 4 ++-- sqls/dtmsvr.storage.tdsql.sql | 39 +++++++++++++++++----------------- test/busi/quick_start.go | 12 +++++------ test/busi/utils.go | 2 +- test/tcc_barrier_test.go | 6 +++--- test/xa_test.go | 2 +- 23 files changed, 61 insertions(+), 61 deletions(-) create mode 100644 dtmcli/dtmimp/README-cn.md create mode 100644 dtmgrpc/dtmgimp/README-cn.md diff --git a/dtmcli/barrier.go b/dtmcli/barrier.go index 492296d..7bdf1ad 100644 --- a/dtmcli/barrier.go +++ b/dtmcli/barrier.go @@ -63,9 +63,9 @@ func insertBarrier(tx DB, transType string, gid string, branchID string, op stri return dtmimp.DBExec(tx, sql, transType, gid, branchID, op, barrierID, reason) } -// Call 子事务屏障,详细介绍见 https://zhuanlan.zhihu.com/p/388444465 -// tx: 本地数据库的事务对象,允许子事务屏障进行事务操作 -// busiCall: 业务函数,仅在必要时被调用 +// Call see detail description in https://en.dtm.pub/practice/barrier.html +// tx: local transaction connection +// busiCall: busi func func (bb *BranchBarrier) Call(tx *sql.Tx, busiCall BarrierBusiFunc) (rerr error) { bid := bb.newBarrierID() defer dtmimp.DeferDo(&rerr, func() error { diff --git a/dtmcli/dtmimp/README-cn.md b/dtmcli/dtmimp/README-cn.md new file mode 100644 index 0000000..ba4fb25 --- /dev/null +++ b/dtmcli/dtmimp/README-cn.md @@ -0,0 +1,2 @@ +## 注意 +此包带imp后缀,主要被dtm内部使用,相关接口可能会发生变更,请勿使用这里的接口 \ No newline at end of file diff --git a/dtmcli/dtmimp/README.md b/dtmcli/dtmimp/README.md index ba4fb25..06aa51e 100644 --- a/dtmcli/dtmimp/README.md +++ b/dtmcli/dtmimp/README.md @@ -1,2 +1,2 @@ -## 注意 -此包带imp后缀,主要被dtm内部使用,相关接口可能会发生变更,请勿使用这里的接口 \ No newline at end of file +## Notice +Please donot use this package, and this package should only be used in dtm internally. The interfaces are not stable, and package name has postfix "imp" \ No newline at end of file diff --git a/dtmcli/dtmimp/trans_xa_base.go b/dtmcli/dtmimp/trans_xa_base.go index d1eb352..a61a3ac 100644 --- a/dtmcli/dtmimp/trans_xa_base.go +++ b/dtmcli/dtmimp/trans_xa_base.go @@ -61,13 +61,12 @@ func (xc *XaClientBase) HandleLocalTrans(xa *TransBase, cb func(*sql.DB) error) return } -// HandleGlobalTrans http/grpc GlobalTransaction的公共方法 +// HandleGlobalTrans http/grpc GlobalTransaction shared func func (xc *XaClientBase) HandleGlobalTrans(xa *TransBase, callDtm func(string) error, callBusi func() error) (rerr error) { rerr = callDtm("prepare") if rerr != nil { return } - // 小概率情况下,prepare成功了,但是由于网络状况导致上面Failure,那么不执行下面defer的内容,等待超时后再回滚标记事务失败,也没有问题 defer DeferDo(&rerr, func() error { return callDtm("submit") }, func() error { diff --git a/dtmcli/tcc.go b/dtmcli/tcc.go index 7d0c77d..b68c5ae 100644 --- a/dtmcli/tcc.go +++ b/dtmcli/tcc.go @@ -25,7 +25,7 @@ type TccGlobalFunc func(tcc *Tcc) (*resty.Response, error) // TccGlobalTransaction begin a tcc global transaction // dtm dtm server address // gid global transaction ID -// tccFunc tcc事务函数,里面会定义全局事务的分支 +// tccFunc define the detail tcc busi func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (rerr error) { return TccGlobalTransaction2(dtm, gid, func(t *Tcc) {}, tccFunc) } @@ -38,7 +38,6 @@ func TccGlobalTransaction2(dtm string, gid string, custom func(*Tcc), tccFunc Tc if rerr != nil { return rerr } - // 小概率情况下,prepare成功了,但是由于网络状况导致上面Failure,那么不执行下面defer的内容,等待超时后再回滚标记事务失败,也没有问题 defer dtmimp.DeferDo(&rerr, func() error { return dtmimp.TransCallDtm(&tcc.TransBase, tcc, "submit") }, func() error { diff --git a/dtmcli/xa.go b/dtmcli/xa.go index 505837d..179891d 100644 --- a/dtmcli/xa.go +++ b/dtmcli/xa.go @@ -58,7 +58,7 @@ func NewXaClient(server string, mysqlConf DBConf, notifyURL string, register XaR return xa, nil } -// HandleCallback 处理commit/rollback的回调 +// HandleCallback handle commit/rollback callback func (xc *XaClient) HandleCallback(gid string, branchID string, action string) interface{} { return xc.XaClientBase.HandleCallback(gid, branchID, action) } diff --git a/dtmgrpc/dtmgimp/README-cn.md b/dtmgrpc/dtmgimp/README-cn.md new file mode 100644 index 0000000..ba4fb25 --- /dev/null +++ b/dtmgrpc/dtmgimp/README-cn.md @@ -0,0 +1,2 @@ +## 注意 +此包带imp后缀,主要被dtm内部使用,相关接口可能会发生变更,请勿使用这里的接口 \ No newline at end of file diff --git a/dtmgrpc/dtmgimp/README.md b/dtmgrpc/dtmgimp/README.md index ba4fb25..06aa51e 100644 --- a/dtmgrpc/dtmgimp/README.md +++ b/dtmgrpc/dtmgimp/README.md @@ -1,2 +1,2 @@ -## 注意 -此包带imp后缀,主要被dtm内部使用,相关接口可能会发生变更,请勿使用这里的接口 \ No newline at end of file +## Notice +Please donot use this package, and this package should only be used in dtm internally. The interfaces are not stable, and package name has postfix "imp" \ No newline at end of file diff --git a/dtmgrpc/dtmgimp/types.go b/dtmgrpc/dtmgimp/types.go index d19cd69..2b6a653 100644 --- a/dtmgrpc/dtmgimp/types.go +++ b/dtmgrpc/dtmgimp/types.go @@ -19,7 +19,7 @@ import ( "google.golang.org/protobuf/proto" ) -// GrpcServerLog 打印grpc服务端的日志 +// GrpcServerLog middleware to print server-side grpc log func GrpcServerLog(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { began := time.Now() logger.Debugf("grpc server handling: %s %s", info.FullMethod, dtmimp.MustMarshalString(req)) @@ -35,7 +35,7 @@ func GrpcServerLog(ctx context.Context, req interface{}, info *grpc.UnaryServerI return m, err } -// GrpcClientLog 打印grpc调用的日志 +// GrpcClientLog middleware to print client-side grpc log func GrpcClientLog(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { logger.Debugf("grpc client calling: %s%s %v", cc.Target(), method, dtmimp.MustMarshalString(req)) LogDtmCtx(ctx) diff --git a/dtmgrpc/tcc.go b/dtmgrpc/tcc.go index bbbaef8..24a2f6a 100644 --- a/dtmgrpc/tcc.go +++ b/dtmgrpc/tcc.go @@ -25,9 +25,9 @@ type TccGrpc struct { type TccGlobalFunc func(tcc *TccGrpc) error // TccGlobalTransaction begin a tcc global transaction -// dtm dtm服务器地址 -// gid 全局事务id -// tccFunc tcc事务函数,里面会定义全局事务的分支 +// dtm dtm server url +// gid global transaction id +// tccFunc tcc busi func, define the transaction logic func TccGlobalTransaction(dtm string, gid string, tccFunc TccGlobalFunc) (rerr error) { return TccGlobalTransaction2(dtm, gid, func(tg *TccGrpc) {}, tccFunc) } @@ -40,7 +40,6 @@ func TccGlobalTransaction2(dtm string, gid string, custom func(*TccGrpc), tccFun if rerr != nil { return rerr } - // 小概率情况下,prepare成功了,但是由于网络状况导致上面Failure,那么不执行下面defer的内容,等待超时后再回滚标记事务失败,也没有问题 defer dtmimp.DeferDo(&rerr, func() error { return dtmgimp.DtmGrpcCall(&tcc.TransBase, "Submit") }, func() error { diff --git a/dtmgrpc/xa.go b/dtmgrpc/xa.go index a7bbebb..37f7cfc 100644 --- a/dtmgrpc/xa.go +++ b/dtmgrpc/xa.go @@ -57,7 +57,7 @@ func NewXaGrpcClient(server string, mysqlConf dtmcli.DBConf, notifyURL string) * return xa } -// HandleCallback 处理commit/rollback的回调 +// HandleCallback handle commit/rollback callback func (xc *XaGrpcClient) HandleCallback(ctx context.Context) (*emptypb.Empty, error) { tb := dtmgimp.TransBaseFromGrpc(ctx) return &emptypb.Empty{}, xc.XaClientBase.HandleCallback(tb.Gid, tb.BranchID, tb.Op) diff --git a/dtmsvr/config/config.go b/dtmsvr/config/config.go index 750af5e..a72bea7 100644 --- a/dtmsvr/config/config.go +++ b/dtmsvr/config/config.go @@ -84,7 +84,7 @@ type configType struct { Log Log `yaml:"Log"` } -// Config 配置 +// Config config var Config = configType{} // MustLoadConfig load config from env and file diff --git a/dtmsvr/storage/sql/sql.go b/dtmsvr/storage/sql/sql.go index d87297a..c15c7fc 100644 --- a/dtmsvr/storage/sql/sql.go +++ b/dtmsvr/storage/sql/sql.go @@ -103,7 +103,7 @@ func (s *Store) MaySaveNewTrans(global *storage.TransGlobalStore, branches []sto dbr := db.Must().Clauses(clause.OnConflict{ DoNothing: true, }).Create(global) - if dbr.RowsAffected <= 0 { // 如果这个不是新事务,返回错误 + if dbr.RowsAffected <= 0 { // not a new trans, return return storage.ErrUniqueConflict } if len(branches) > 0 { diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 2c1c16a..768a881 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -67,7 +67,7 @@ func (t *TransGlobal) changeBranchStatus(b *TransBranch, status string, branchPo GetStore().LockGlobalSaveBranches(t.Gid, t.Status, []TransBranch{*b}, branchPos) logger.Infof("LockGlobalSaveBranches ok: gid: %s old status: %s branches: %s", b.Gid, dtmcli.StatusPrepared, b.String()) - } else { // 为了性能优化,把branch的status更新异步化 + } else { // for better performance, batch the updates of branch status updateBranchAsyncChan <- branchStatus{id: b.ID, gid: t.Gid, status: status, finishTime: &now} } } diff --git a/dtmutil/db.go b/dtmutil/db.go index 86973b2..97bfefa 100644 --- a/dtmutil/db.go +++ b/dtmutil/db.go @@ -78,7 +78,7 @@ func (op *tracePlugin) Initialize(db *gorm.DB) (err error) { afterName := "cb_after" logger.Debugf("installing db plugin: %s", op.Name()) - // 开始前 + // before _ = db.Callback().Create().Before("gorm:before_create").Register(beforeName, before) _ = db.Callback().Query().Before("gorm:query").Register(beforeName, before) _ = db.Callback().Delete().Before("gorm:before_delete").Register(beforeName, before) @@ -86,7 +86,7 @@ func (op *tracePlugin) Initialize(db *gorm.DB) (err error) { _ = db.Callback().Row().Before("gorm:row").Register(beforeName, before) _ = db.Callback().Raw().Before("gorm:raw").Register(beforeName, before) - // 结束后 + // after _ = db.Callback().Create().After("gorm:after_create").Register(afterName, after) _ = db.Callback().Query().After("gorm:after_query").Register(afterName, after) _ = db.Callback().Delete().After("gorm:after_delete").Register(afterName, after) diff --git a/dtmutil/utils.go b/dtmutil/utils.go index 849b539..9c78bb2 100644 --- a/dtmutil/utils.go +++ b/dtmutil/utils.go @@ -112,7 +112,7 @@ func MustGetwd() string { return wd } -// GetSQLDir 获取调用该函数的caller源代码的目录,主要用于测试时,查找相关文件 +// GetSQLDir get sql scripts dir, used in test func GetSQLDir() string { wd := MustGetwd() if filepath.Base(wd) == "test" { diff --git a/helper/bench/main.go b/helper/bench/main.go index e8cb94c..058db3e 100644 --- a/helper/bench/main.go +++ b/helper/bench/main.go @@ -47,8 +47,8 @@ func main() { } else { hintAndExit() } - dtmsvr.StartSvr() // 启动dtmsvr的api服务 - go dtmsvr.CronExpiredTrans(-1) // 启动dtmsvr的定时过期查询 - svr.StartSvr() // 启动bench服务 + dtmsvr.StartSvr() + go dtmsvr.CronExpiredTrans(-1) + svr.StartSvr() select {} } diff --git a/main.go b/main.go index f0fcd98..813e920 100644 --- a/main.go +++ b/main.go @@ -69,7 +69,7 @@ func main() { } _, _ = maxprocs.Set(maxprocs.Logger(logger.Infof)) registry.WaitStoreUp() - dtmsvr.StartSvr() // 启动dtmsvr的api服务 - go dtmsvr.CronExpiredTrans(-1) // 启动dtmsvr的定时过期查询 + dtmsvr.StartSvr() // start dtmsvr api + go dtmsvr.CronExpiredTrans(-1) // start dtmsvr cron job select {} } diff --git a/sqls/dtmsvr.storage.tdsql.sql b/sqls/dtmsvr.storage.tdsql.sql index 09cf816..2f6e42d 100644 --- a/sqls/dtmsvr.storage.tdsql.sql +++ b/sqls/dtmsvr.storage.tdsql.sql @@ -4,38 +4,37 @@ CREATE DATABASE IF NOT EXISTS dtm drop table IF EXISTS dtm.trans_global; CREATE TABLE if not EXISTS dtm.trans_global ( `id` bigint(22) NOT NULL AUTO_INCREMENT, - `gid` varchar(128) NOT NULL COMMENT '事务全局id', - `trans_type` varchar(45) not null COMMENT '事务类型: saga | xa | tcc | msg', - -- `data` TEXT COMMENT '事务携带的数据', -- 影响性能,不必要存储 - `status` varchar(12) NOT NULL COMMENT '全局事务的状态 prepared | submitted | aborting | finished | rollbacked', - `query_prepared` varchar(128) NOT NULL COMMENT 'prepared状态事务的查询api', - `protocol` varchar(45) not null comment '通信协议 http | grpc', + `gid` varchar(128) NOT NULL COMMENT 'global transaction id', + `trans_type` varchar(45) not null COMMENT 'transaction type: saga | xa | tcc | msg', + `status` varchar(12) NOT NULL COMMENT 'tranaction status: prepared | submitted | aborting | finished | rollbacked', + `query_prepared` varchar(128) NOT NULL COMMENT 'url to check for 2-phase message', + `protocol` varchar(45) not null comment 'protocol: http | grpc | json-rpc', `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, - `commit_time` datetime DEFAULT NULL, `finish_time` datetime DEFAULT NULL, `rollback_time` datetime DEFAULT NULL, - `options` varchar(256) DEFAULT '', - `custom_data` varchar(256) DEFAULT '', - `next_cron_interval` int(11) default null comment '下次定时处理的间隔', - `next_cron_time` datetime default null comment '下次定时处理的时间', - `owner` varchar(128) not null default '' comment '正在处理全局事务的锁定者', + `options` varchar(1024) DEFAULT 'options for transaction like: TimeoutToFail, RequestTimeout', + `custom_data` varchar(256) DEFAULT '' COMMENT 'custom data for transaction', + `next_cron_interval` int(11) default null comment 'next cron interval. for use of cron job', + `next_cron_time` datetime default null comment 'next time to process this trans. for use of cron job', + `owner` varchar(128) not null default '' comment 'who is locking this trans', + `ext_data` TEXT comment 'extended data for this trans', PRIMARY KEY (`id`,`gid`), UNIQUE KEY `id` (`id`,`gid`), UNIQUE KEY `gid` (`gid`), key `owner`(`owner`), - key `status_next_cron_time` (`status`, `next_cron_time`) comment '这个索引用于查询超时的全局事务,能够合理的走索引' + key `status_next_cron_time` (`status`, `next_cron_time`) comment 'cron job will use this index to query trans' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 shardkey=gid; drop table IF EXISTS dtm.trans_branch_op; CREATE TABLE IF NOT EXISTS dtm.trans_branch_op ( `id` bigint(22) NOT NULL AUTO_INCREMENT, - `gid` varchar(128) NOT NULL COMMENT '事务全局id', - `url` varchar(128) NOT NULL COMMENT '动作关联的url', - `data` TEXT COMMENT '请求所携带的数据', - `bin_data` BLOB COMMENT 'grpc的二进制数据', - `branch_id` VARCHAR(128) NOT NULL COMMENT '事务分支ID', - `op` varchar(45) NOT NULL COMMENT '事务分支类型 saga_action | saga_compensate | xa', - `status` varchar(45) NOT NULL COMMENT '步骤的状态 submitted | finished | rollbacked', + `gid` varchar(128) NOT NULL COMMENT 'global transaction id', + `url` varchar(128) NOT NULL COMMENT 'the url of this op', + `data` TEXT COMMENT 'request body, depreceated', + `bin_data` BLOB COMMENT 'request body', + `branch_id` VARCHAR(128) NOT NULL COMMENT 'transaction branch ID', + `op` varchar(45) NOT NULL COMMENT 'transaction operation type like: action | compensate | try | confirm | cancel', + `status` varchar(45) NOT NULL COMMENT 'transaction op status: prepared | succeed | failed', `finish_time` datetime DEFAULT NULL, `rollback_time` datetime DEFAULT NULL, `create_time` datetime DEFAULT NULL, diff --git a/test/busi/quick_start.go b/test/busi/quick_start.go index 09d84ce..6d57af5 100644 --- a/test/busi/quick_start.go +++ b/test/busi/quick_start.go @@ -9,7 +9,7 @@ import ( "github.com/gin-gonic/gin" ) -// 事务参与者的服务地址 +// busi address const qsBusiAPI = "/api/busi_start" const qsBusiPort = 8082 @@ -57,14 +57,14 @@ const dtmServer = "http://localhost:36789/api/dtmsvr" // QsFireRequest quick start: fire request func QsFireRequest() string { - req := &gin.H{"amount": 30} // 微服务的载荷 - // DtmServer为DTM服务的地址 + req := &gin.H{"amount": 30} // load of micro-service + // DtmServer is the url of dtm saga := dtmcli.NewSaga(dtmServer, dtmcli.MustGenGid(dtmServer)). - // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 逆向操作为url: qsBusi+"/TransOutCompensate" + // add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCompensate" Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). - // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransOut", 逆向操作为url: qsBusi+"/TransInCompensate" + // add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCompensate" Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) - // 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务 + // submit the created saga transaction,dtm ensures all subtractions either complete or get revoked err := saga.Submit() if err != nil { diff --git a/test/busi/utils.go b/test/busi/utils.go index 8f68373..de5a490 100644 --- a/test/busi/utils.go +++ b/test/busi/utils.go @@ -100,7 +100,7 @@ func oldWrapHandler(fn func(*gin.Context) (interface{}, error)) gin.HandlerFunc return fn(c) }() var b = []byte{} - if resp, ok := r.(*resty.Response); ok { // 如果是response,则取出body直接处理 + if resp, ok := r.(*resty.Response); ok { // if it is a response,the get the body b = resp.Body() } else if err == nil { b, err = json.Marshal(r) diff --git a/test/tcc_barrier_test.go b/test/tcc_barrier_test.go index c55308d..3774b31 100644 --- a/test/tcc_barrier_test.go +++ b/test/tcc_barrier_test.go @@ -74,7 +74,7 @@ func runTestTccBarrierDisorder(t *testing.T, store string) { tryURL := Busi + "/TccBTransOutTry" confirmURL := Busi + "/TccBTransOutConfirm" cancelURL := Busi + "/TccBSleepCancel" - // 请参见子事务屏障里的时序图,这里为了模拟该时序图,手动拆解了callbranch + // refer to time diagram for barrier, here we simulate it branchID := tcc.NewSubBranchID() busi.SetSleepCancelHandler(func(c *gin.Context) interface{} { res := busi.TccBarrierTransOutCancel(c) @@ -85,7 +85,7 @@ func runTestTccBarrierDisorder(t *testing.T, store string) { logger.Debugf("disorderHandler after cancel return read") return res }) - // 注册子事务 + // register tcc branch resp, err := dtmimp.RestyClient.R(). SetBody(map[string]interface{}{ "gid": tcc.Gid, @@ -124,7 +124,7 @@ func runTestTccBarrierDisorder(t *testing.T, store string) { "op": dtmcli.BranchTry, }). Post(tryURL) - assert.True(t, strings.Contains(r.String(), dtmcli.ResultSuccess)) // 这个是悬挂操作,为了简单起见,依旧让他返回成功 + assert.True(t, strings.Contains(r.String(), dtmcli.ResultSuccess)) // dangle op, return success logger.Debugf("cronFinished read") <-cronFinished <-cronFinished diff --git a/test/xa_test.go b/test/xa_test.go index b276340..6da797a 100644 --- a/test/xa_test.go +++ b/test/xa_test.go @@ -49,7 +49,7 @@ func TestXaDuplicate(t *testing.T) { _, err = dtmimp.DBExec(sdb, "xa recover") assert.Nil(t, err) } - _, err = dtmimp.DBExec(sdb, dtmimp.GetDBSpecial().GetXaSQL("commit", gid+"-01")) // 先把某一个事务提交,模拟重复请求 + _, err = dtmimp.DBExec(sdb, dtmimp.GetDBSpecial().GetXaSQL("commit", gid+"-01")) // simulate repeated request assert.Nil(t, err) return xa.CallBranch(req, busi.Busi+"/TransInXa") }) From 37769befc41f484babae41fc358c278ab830e220 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 14 Mar 2022 20:45:38 +0800 Subject: [PATCH 21/41] use Escape --- dtmcli/barrier.go | 2 +- dtmcli/dtmimp/trans_base.go | 2 +- dtmcli/dtmimp/utils.go | 12 ++++++++++++ dtmutil/db.go | 3 +-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/dtmcli/barrier.go b/dtmcli/barrier.go index 7bdf1ad..d76ae5b 100644 --- a/dtmcli/barrier.go +++ b/dtmcli/barrier.go @@ -38,7 +38,7 @@ func (bb *BranchBarrier) newBarrierID() string { // BarrierFromQuery construct transaction info from request func BarrierFromQuery(qs url.Values) (*BranchBarrier, error) { - return BarrierFrom(qs.Get("trans_type"), qs.Get("gid"), qs.Get("branch_id"), qs.Get("op")) + return BarrierFrom(dtmimp.EscapeGet(qs, "trans_type"), dtmimp.EscapeGet(qs, "gid"), dtmimp.EscapeGet(qs, "branch_id"), dtmimp.EscapeGet(qs, "op")) } // BarrierFrom construct transaction info from request diff --git a/dtmcli/dtmimp/trans_base.go b/dtmcli/dtmimp/trans_base.go index 2dd14b3..a1a136f 100644 --- a/dtmcli/dtmimp/trans_base.go +++ b/dtmcli/dtmimp/trans_base.go @@ -87,7 +87,7 @@ func (t *TransBase) WithGlobalTransRequestTimeout(timeout int64) { // TransBaseFromQuery construct transaction info from request func TransBaseFromQuery(qs url.Values) *TransBase { - return NewTransBase(qs.Get("gid"), qs.Get("trans_type"), qs.Get("dtm"), qs.Get("branch_id")) + return NewTransBase(EscapeGet(qs, "gid"), EscapeGet(qs, "trans_type"), EscapeGet(qs, "dtm"), EscapeGet(qs, "branch_id")) } // TransCallDtm TransBase call dtm diff --git a/dtmcli/dtmimp/utils.go b/dtmcli/dtmimp/utils.go index 285d186..2500fc3 100644 --- a/dtmcli/dtmimp/utils.go +++ b/dtmcli/dtmimp/utils.go @@ -12,6 +12,7 @@ import ( "errors" "fmt" "net/http" + "net/url" "os" "runtime" "strconv" @@ -235,3 +236,14 @@ func DeferDo(rerr *error, success func() error, fail func() error) { } }() } + +// Escape solve CodeQL reported problem +func Escape(input string) string { + replacer := strings.NewReplacer("'", "", "\n", "", "\r", "", " ", "") + return replacer.Replace(input) +} + +// EscapeGet escape get +func EscapeGet(qs url.Values, key string) string { + return Escape(qs.Get(key)) +} diff --git a/dtmutil/db.go b/dtmutil/db.go index 97bfefa..1862870 100644 --- a/dtmutil/db.go +++ b/dtmutil/db.go @@ -3,7 +3,6 @@ package dtmutil import ( "database/sql" "fmt" - "strings" "sync" "time" @@ -101,7 +100,7 @@ func DbGet(conf dtmcli.DBConf, ops ...func(*gorm.DB)) *DB { dsn := dtmimp.GetDsn(conf) db, ok := dbs.Load(dsn) if !ok { - logger.Debugf("connecting %s", strings.Replace(dsn, conf.Password, "****", 1)) + logger.Infof("connecting '%s' '%s' '%s' '%d'", conf.Driver, conf.Host, conf.User, conf.Port) db1, err := gorm.Open(getGormDialetor(conf.Driver, dsn), &gorm.Config{ SkipDefaultTransaction: true, }) From 23aeedabb47d8151e3bb2bb34c45183bd7e4eb9a Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 14 Mar 2022 21:46:02 +0800 Subject: [PATCH 22/41] update replace --- dtmcli/dtmimp/utils.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dtmcli/dtmimp/utils.go b/dtmcli/dtmimp/utils.go index 2500fc3..119749c 100644 --- a/dtmcli/dtmimp/utils.go +++ b/dtmcli/dtmimp/utils.go @@ -239,8 +239,10 @@ func DeferDo(rerr *error, success func() error, fail func() error) { // Escape solve CodeQL reported problem func Escape(input string) string { - replacer := strings.NewReplacer("'", "", "\n", "", "\r", "", " ", "") - return replacer.Replace(input) + v := strings.Replace(input, "\n", "", -1) + v = strings.Replace(v, "\r", "", -1) + v = strings.Replace(v, ";", "", -1) + return strings.Replace(v, "'", "", -1) } // EscapeGet escape get From 33eb365375ba0f7deea9456b0c11f3b42d0f04c4 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 14 Mar 2022 22:15:05 +0800 Subject: [PATCH 23/41] add escape --- dtmsvr/api_http.go | 2 +- dtmsvr/trans_class.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dtmsvr/api_http.go b/dtmsvr/api_http.go index 2ba8373..2ca1da0 100644 --- a/dtmsvr/api_http.go +++ b/dtmsvr/api_http.go @@ -64,7 +64,7 @@ func registerBranch(c *gin.Context) interface{} { err := c.BindJSON(&data) e2p(err) branch := TransBranch{ - Gid: data["gid"], + Gid: dtmimp.Escape(data["gid"]), BranchID: data["branch_id"], Status: dtmcli.StatusPrepared, BinData: []byte(data["data"]), diff --git a/dtmsvr/trans_class.go b/dtmsvr/trans_class.go index 2eae58c..be60ac8 100644 --- a/dtmsvr/trans_class.go +++ b/dtmsvr/trans_class.go @@ -76,6 +76,8 @@ func TransFromContext(c *gin.Context) *TransGlobal { e2p(err) m := TransGlobal{} dtmimp.MustUnmarshal(b, &m) + m.Status = dtmimp.Escape(m.Status) + m.Gid = dtmimp.Escape(m.Gid) logger.Debugf("creating trans in prepare") m.setupPayloads() m.Ext.Headers = map[string]string{} From 28412bd75746dd6172b7a376b05d27dbde39f339 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Tue, 15 Mar 2022 11:16:37 +0800 Subject: [PATCH 24/41] xa use barrier --- dtmcli/barrier.go | 22 +++++++--------------- dtmcli/barrier_mongo.go | 10 +++++----- dtmcli/barrier_redis.go | 4 ++-- dtmcli/consts.go | 15 --------------- dtmcli/dtmimp/consts.go | 19 +++++++++++++++++++ dtmcli/dtmimp/trans_xa_base.go | 10 +++++++++- dtmcli/dtmimp/utils.go | 12 +++++++++++- dtmcli/tcc.go | 10 +++++----- dtmcli/xa.go | 2 +- dtmsvr/api.go | 6 +++--- dtmsvr/trans_status.go | 2 +- dtmsvr/trans_type_msg.go | 6 +++--- dtmsvr/trans_type_saga.go | 10 +++++----- dtmsvr/trans_type_tcc.go | 2 +- dtmsvr/trans_type_xa.go | 2 +- test/base_test.go | 2 +- test/busi/base_http.go | 2 +- test/tcc_barrier_test.go | 18 +++++++++--------- 18 files changed, 84 insertions(+), 70 deletions(-) diff --git a/dtmcli/barrier.go b/dtmcli/barrier.go index d76ae5b..1fcf61f 100644 --- a/dtmcli/barrier.go +++ b/dtmcli/barrier.go @@ -55,14 +55,6 @@ func BarrierFrom(transType, gid, branchID, op string) (*BranchBarrier, error) { return ti, nil } -func insertBarrier(tx DB, transType string, gid string, branchID string, op string, barrierID string, reason string) (int64, error) { - if op == "" { - return 0, nil - } - sql := dtmimp.GetDBSpecial().GetInsertIgnoreTemplate(dtmimp.BarrierTableName+"(trans_type, gid, branch_id, op, barrier_id, reason) values(?,?,?,?,?,?)", "uniq_barrier") - return dtmimp.DBExec(tx, sql, transType, gid, branchID, op, barrierID, reason) -} - // Call see detail description in https://en.dtm.pub/practice/barrier.html // tx: local transaction connection // busiCall: busi func @@ -74,12 +66,12 @@ func (bb *BranchBarrier) Call(tx *sql.Tx, busiCall BarrierBusiFunc) (rerr error) return tx.Rollback() }) originOp := map[string]string{ - BranchCancel: BranchTry, - BranchCompensate: BranchAction, + dtmimp.OpCancel: dtmimp.OpTry, + dtmimp.OpCompensate: dtmimp.OpAction, }[bb.Op] - originAffected, oerr := insertBarrier(tx, bb.TransType, bb.Gid, bb.BranchID, originOp, bid, bb.Op) - currentAffected, rerr := insertBarrier(tx, bb.TransType, bb.Gid, bb.BranchID, bb.Op, bid, bb.Op) + originAffected, oerr := dtmimp.InsertBarrier(tx, bb.TransType, bb.Gid, bb.BranchID, originOp, bid, bb.Op) + currentAffected, rerr := dtmimp.InsertBarrier(tx, bb.TransType, bb.Gid, bb.BranchID, bb.Op, bid, bb.Op) logger.Debugf("originAffected: %d currentAffected: %d", originAffected, currentAffected) if rerr == nil && bb.Op == dtmimp.MsgDoOp && currentAffected == 0 { // for msg's DoAndSubmit, repeated insert should be rejected. @@ -90,7 +82,7 @@ func (bb *BranchBarrier) Call(tx *sql.Tx, busiCall BarrierBusiFunc) (rerr error) rerr = oerr } - if (bb.Op == BranchCancel || bb.Op == BranchCompensate) && originAffected > 0 || // null compensate + if (bb.Op == dtmimp.OpCancel || bb.Op == dtmimp.OpCompensate) && originAffected > 0 || // null compensate currentAffected == 0 { // repeated request or dangled request return } @@ -111,13 +103,13 @@ func (bb *BranchBarrier) CallWithDB(db *sql.DB, busiCall BarrierBusiFunc) error // QueryPrepared queries prepared data func (bb *BranchBarrier) QueryPrepared(db *sql.DB) error { - _, err := insertBarrier(db, bb.TransType, bb.Gid, dtmimp.MsgDoBranch0, dtmimp.MsgDoOp, dtmimp.MsgDoBarrier1, "rollback") + _, err := dtmimp.InsertBarrier(db, bb.TransType, bb.Gid, dtmimp.MsgDoBranch0, dtmimp.MsgDoOp, dtmimp.MsgDoBarrier1, dtmimp.OpRollback) var reason string if err == nil { sql := fmt.Sprintf("select reason from %s where gid=? and branch_id=? and op=? and barrier_id=?", dtmimp.BarrierTableName) err = db.QueryRow(sql, bb.Gid, dtmimp.MsgDoBranch0, dtmimp.MsgDoOp, dtmimp.MsgDoBarrier1).Scan(&reason) } - if reason == "rollback" { + if reason == dtmimp.OpRollback { return ErrFailure } return err diff --git a/dtmcli/barrier_mongo.go b/dtmcli/barrier_mongo.go index 5604eeb..d6c7f9b 100644 --- a/dtmcli/barrier_mongo.go +++ b/dtmcli/barrier_mongo.go @@ -25,8 +25,8 @@ func (bb *BranchBarrier) MongoCall(mc *mongo.Client, busiCall func(mongo.Session return sc.AbortTransaction(sc) }) originOp := map[string]string{ - BranchCancel: BranchTry, - BranchCompensate: BranchAction, + dtmimp.OpCancel: dtmimp.OpTry, + dtmimp.OpCompensate: dtmimp.OpAction, }[bb.Op] originAffected, oerr := mongoInsertBarrier(sc, mc, bb.TransType, bb.Gid, bb.BranchID, originOp, bid, bb.Op) @@ -40,7 +40,7 @@ func (bb *BranchBarrier) MongoCall(mc *mongo.Client, busiCall func(mongo.Session if rerr == nil { rerr = oerr } - if (bb.Op == BranchCancel || bb.Op == BranchCompensate) && originAffected > 0 || // null compensate + if (bb.Op == dtmimp.OpCancel || bb.Op == dtmimp.OpCompensate) && originAffected > 0 || // null compensate currentAffected == 0 { // repeated request or dangled request return } @@ -54,7 +54,7 @@ func (bb *BranchBarrier) MongoCall(mc *mongo.Client, busiCall func(mongo.Session // MongoQueryPrepared query prepared for redis // experimental func (bb *BranchBarrier) MongoQueryPrepared(mc *mongo.Client) error { - _, err := mongoInsertBarrier(context.Background(), mc, bb.TransType, bb.Gid, dtmimp.MsgDoBranch0, dtmimp.MsgDoOp, dtmimp.MsgDoBarrier1, "rollback") + _, err := mongoInsertBarrier(context.Background(), mc, bb.TransType, bb.Gid, dtmimp.MsgDoBranch0, dtmimp.MsgDoOp, dtmimp.MsgDoBarrier1, dtmimp.OpRollback) var result bson.M if err == nil { fs := strings.Split(dtmimp.BarrierTableName, ".") @@ -70,7 +70,7 @@ func (bb *BranchBarrier) MongoQueryPrepared(mc *mongo.Client) error { if err == nil { reason, _ = result["reason"].(string) } - if err == nil && reason == "rollback" { + if err == nil && reason == dtmimp.OpRollback { return ErrFailure } return err diff --git a/dtmcli/barrier_redis.go b/dtmcli/barrier_redis.go index 1ff1591..cef1b39 100644 --- a/dtmcli/barrier_redis.go +++ b/dtmcli/barrier_redis.go @@ -13,8 +13,8 @@ func (bb *BranchBarrier) RedisCheckAdjustAmount(rd *redis.Client, key string, am bid := bb.newBarrierID() bkey1 := fmt.Sprintf("%s-%s-%s-%s", bb.Gid, bb.BranchID, bb.Op, bid) originOp := map[string]string{ - BranchCancel: BranchTry, - BranchCompensate: BranchAction, + dtmimp.OpCancel: dtmimp.OpTry, + dtmimp.OpCompensate: dtmimp.OpAction, }[bb.Op] bkey2 := fmt.Sprintf("%s-%s-%s-%s", bb.Gid, bb.BranchID, originOp, bid) v, err := rd.Eval(rd.Context(), ` -- RedisCheckAdjustAmount diff --git a/dtmcli/consts.go b/dtmcli/consts.go index f76fd84..fad9776 100644 --- a/dtmcli/consts.go +++ b/dtmcli/consts.go @@ -24,21 +24,6 @@ const ( // StatusAborting status for global trans status. StatusAborting = "aborting" - // BranchTry branch type for TCC - BranchTry = "try" - // BranchConfirm branch type for TCC - BranchConfirm = "confirm" - // BranchCancel branch type for TCC - BranchCancel = "cancel" - // BranchAction branch type for message, SAGA, XA - BranchAction = "action" - // BranchCompensate branch type for SAGA - BranchCompensate = "compensate" - // BranchCommit branch type for XA - BranchCommit = "commit" - // BranchRollback branch type for XA - BranchRollback = "rollback" - // ResultSuccess for result of a trans/trans branch ResultSuccess = dtmimp.ResultSuccess // ResultFailure for result of a trans/trans branch diff --git a/dtmcli/dtmimp/consts.go b/dtmcli/dtmimp/consts.go index 1061a9f..95757ac 100644 --- a/dtmcli/dtmimp/consts.go +++ b/dtmcli/dtmimp/consts.go @@ -16,6 +16,22 @@ const ( // ResultOngoing for result of a trans/trans branch // Same as HTTP status 425 and GRPC code 9 ResultOngoing = "ONGOING" + + // OpTry branch type for TCC + OpTry = "try" + // OpConfirm branch type for TCC + OpConfirm = "confirm" + // OpCancel branch type for TCC + OpCancel = "cancel" + // OpAction branch type for message, SAGA, XA + OpAction = "action" + // OpCompensate branch type for SAGA + OpCompensate = "compensate" + // OpCommit branch type for XA + OpCommit = "commit" + // OpRollback branch type for XA + OpRollback = "rollback" + // DBTypeMysql const for driver mysql DBTypeMysql = "mysql" // DBTypePostgres const for driver postgres @@ -36,4 +52,7 @@ const ( MsgDoBarrier1 = "01" // MsgDoOp const for DoAndSubmit barrier op MsgDoOp = "msg" + + // XaBarrier1 const for xa barrier id + XaBarrier1 = "01" ) diff --git a/dtmcli/dtmimp/trans_xa_base.go b/dtmcli/dtmimp/trans_xa_base.go index a61a3ac..f934a15 100644 --- a/dtmcli/dtmimp/trans_xa_base.go +++ b/dtmcli/dtmimp/trans_xa_base.go @@ -33,6 +33,10 @@ func (xc *XaClientBase) HandleCallback(gid string, branchID string, action strin (strings.Contains(err.Error(), "XAER_NOTA") || strings.Contains(err.Error(), "does not exist")) { // Repeat commit/rollback with the same id, report this error, ignore err = nil } + if action == OpRollback && err == nil { + // rollback insert a row after prepare. no-error means prepare has finished. + _, err = InsertBarrier(db, "xa", gid, branchID, OpAction, XaBarrier1, action) + } return err } @@ -57,7 +61,11 @@ func (xc *XaClientBase) HandleLocalTrans(xa *TransBase, cb func(*sql.DB) error) defer func() { _, _ = DBExec(db, GetDBSpecial().GetXaSQL("end", xaBranch)) }() - rerr = cb(db) + // prepare and rollback both insert a row + _, rerr = InsertBarrier(db, xa.TransType, xa.Gid, xa.BranchID, OpAction, XaBarrier1, OpAction) + if rerr == nil { + rerr = cb(db) + } return } diff --git a/dtmcli/dtmimp/utils.go b/dtmcli/dtmimp/utils.go index 119749c..1af1fd9 100644 --- a/dtmcli/dtmimp/utils.go +++ b/dtmcli/dtmimp/utils.go @@ -242,10 +242,20 @@ func Escape(input string) string { v := strings.Replace(input, "\n", "", -1) v = strings.Replace(v, "\r", "", -1) v = strings.Replace(v, ";", "", -1) - return strings.Replace(v, "'", "", -1) + // v = strings.Replace(v, "'", "", -1) + return v } // EscapeGet escape get func EscapeGet(qs url.Values, key string) string { return Escape(qs.Get(key)) } + +// InsertBarrier insert a record to barrier +func InsertBarrier(tx DB, transType string, gid string, branchID string, op string, barrierID string, reason string) (int64, error) { + if op == "" { + return 0, nil + } + sql := GetDBSpecial().GetInsertIgnoreTemplate(BarrierTableName+"(trans_type, gid, branch_id, op, barrier_id, reason) values(?,?,?,?,?,?)", "uniq_barrier") + return DBExec(tx, sql, transType, gid, branchID, op, barrierID, reason) +} diff --git a/dtmcli/tcc.go b/dtmcli/tcc.go index b68c5ae..1451427 100644 --- a/dtmcli/tcc.go +++ b/dtmcli/tcc.go @@ -60,13 +60,13 @@ func TccFromQuery(qs url.Values) (*Tcc, error) { func (t *Tcc) CallBranch(body interface{}, tryURL string, confirmURL string, cancelURL string) (*resty.Response, error) { branchID := t.NewSubBranchID() err := dtmimp.TransRegisterBranch(&t.TransBase, map[string]string{ - "data": dtmimp.MustMarshalString(body), - "branch_id": branchID, - BranchConfirm: confirmURL, - BranchCancel: cancelURL, + "data": dtmimp.MustMarshalString(body), + "branch_id": branchID, + dtmimp.OpConfirm: confirmURL, + dtmimp.OpCancel: cancelURL, }, "registerBranch") if err != nil { return nil, err } - return dtmimp.TransRequestBranch(&t.TransBase, "POST", body, branchID, BranchTry, tryURL) + return dtmimp.TransRequestBranch(&t.TransBase, "POST", body, branchID, dtmimp.OpTry, tryURL) } diff --git a/dtmcli/xa.go b/dtmcli/xa.go index 179891d..e2b8d01 100644 --- a/dtmcli/xa.go +++ b/dtmcli/xa.go @@ -101,5 +101,5 @@ func (xc *XaClient) XaGlobalTransaction2(gid string, custom func(*Xa), xaFunc Xa // CallBranch call a xa branch func (x *Xa) CallBranch(body interface{}, url string) (*resty.Response, error) { branchID := x.NewSubBranchID() - return dtmimp.TransRequestBranch(&x.TransBase, "POST", body, branchID, BranchAction, url) + return dtmimp.TransRequestBranch(&x.TransBase, "POST", body, branchID, dtmimp.OpAction, url) } diff --git a/dtmsvr/api.go b/dtmsvr/api.go index 5c3d118..809d2ee 100644 --- a/dtmsvr/api.go +++ b/dtmsvr/api.go @@ -70,14 +70,14 @@ func svcForceStop(t *TransGlobal) interface{} { func svcRegisterBranch(transType string, branch *TransBranch, data map[string]string) error { branches := []TransBranch{*branch, *branch} if transType == "tcc" { - for i, b := range []string{dtmcli.BranchCancel, dtmcli.BranchConfirm} { + for i, b := range []string{dtmimp.OpCancel, dtmimp.OpConfirm} { branches[i].Op = b branches[i].URL = data[b] } } else if transType == "xa" { - branches[0].Op = dtmcli.BranchRollback + branches[0].Op = dtmimp.OpRollback branches[0].URL = data["url"] - branches[1].Op = dtmcli.BranchCommit + branches[1].Op = dtmimp.OpCommit branches[1].URL = data["url"] } else { return fmt.Errorf("unknow trans type: %s", transType) diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index 768a881..3e8495e 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -176,7 +176,7 @@ func (t *TransGlobal) getBranchResult(branch *TransBranch) (string, error) { err := t.getURLResult(branch.URL, branch.BranchID, branch.Op, branch.BinData) if err == nil { return dtmcli.StatusSucceed, nil - } else if t.TransType == "saga" && branch.Op == dtmcli.BranchAction && errors.Is(err, dtmcli.ErrFailure) { + } else if t.TransType == "saga" && branch.Op == dtmimp.OpAction && errors.Is(err, dtmcli.ErrFailure) { return dtmcli.StatusFailed, nil } else if errors.Is(err, dtmcli.ErrOngoing) { return "", dtmcli.ErrOngoing diff --git a/dtmsvr/trans_type_msg.go b/dtmsvr/trans_type_msg.go index 5315e36..da3c80e 100644 --- a/dtmsvr/trans_type_msg.go +++ b/dtmsvr/trans_type_msg.go @@ -30,8 +30,8 @@ func (t *transMsgProcessor) GenBranches() []TransBranch { Gid: t.Gid, BranchID: fmt.Sprintf("%02d", i+1), BinData: t.BinPayloads[i], - URL: step[dtmcli.BranchAction], - Op: dtmcli.BranchAction, + URL: step[dtmimp.OpAction], + Op: dtmimp.OpAction, Status: dtmcli.StatusPrepared, } branches = append(branches, *b) @@ -79,7 +79,7 @@ func (t *transMsgProcessor) ProcessOnce(branches []TransBranch) error { var err error for i := range branches { b := &branches[i] - if b.Op != dtmcli.BranchAction || b.Status != dtmcli.StatusPrepared { + if b.Op != dtmimp.OpAction || b.Status != dtmcli.StatusPrepared { continue } if t.Concurrent { diff --git a/dtmsvr/trans_type_saga.go b/dtmsvr/trans_type_saga.go index 0c2da0d..a285e63 100644 --- a/dtmsvr/trans_type_saga.go +++ b/dtmsvr/trans_type_saga.go @@ -30,7 +30,7 @@ func (t *transSagaProcessor) GenBranches() []TransBranch { branches := []TransBranch{} for i, step := range t.Steps { branch := fmt.Sprintf("%02d", i+1) - for _, op := range []string{dtmcli.BranchCompensate, dtmcli.BranchAction} { + for _, op := range []string{dtmimp.OpCompensate, dtmimp.OpAction} { branches = append(branches, TransBranch{ Gid: t.Gid, BranchID: branch, @@ -82,7 +82,7 @@ func (t *transSagaProcessor) ProcessOnce(branches []TransBranch) error { branchResults := make([]branchResult, n) // save the branch result for i := 0; i < n; i++ { b := branches[i] - if b.Op == dtmcli.BranchAction { + if b.Op == dtmimp.OpAction { if b.Status == dtmcli.StatusPrepared { rsAToStart++ } else if b.Status == dtmcli.StatusFailed { @@ -163,7 +163,7 @@ func (t *transSagaProcessor) ProcessOnce(branches []TransBranch) error { runBranches := func(toRun []int) { for _, b := range toRun { branchResults[b].started = true - if branchResults[b].op == dtmcli.BranchAction { + if branchResults[b].op == dtmimp.OpAction { rsAStarted++ } go asyncExecBranch(b) @@ -174,7 +174,7 @@ func (t *transSagaProcessor) ProcessOnce(branches []TransBranch) error { case r := <-resultChan: br := &branchResults[r.index] br.status = r.status - if r.op == dtmcli.BranchAction { + if r.op == dtmimp.OpAction { rsADone++ if r.status == dtmcli.StatusFailed { rsAFailed++ @@ -202,7 +202,7 @@ func (t *transSagaProcessor) ProcessOnce(branches []TransBranch) error { } } for i, b := range branchResults { - if b.op == dtmcli.BranchCompensate && b.status != dtmcli.StatusSucceed && + if b.op == dtmimp.OpCompensate && b.status != dtmcli.StatusSucceed && branchResults[i+1].status != dtmcli.StatusPrepared { rsCToStart++ } diff --git a/dtmsvr/trans_type_tcc.go b/dtmsvr/trans_type_tcc.go index 31ae557..5898d97 100644 --- a/dtmsvr/trans_type_tcc.go +++ b/dtmsvr/trans_type_tcc.go @@ -31,7 +31,7 @@ func (t *transTccProcessor) ProcessOnce(branches []TransBranch) error { if t.Status == dtmcli.StatusPrepared && t.isTimeout() { t.changeStatus(dtmcli.StatusAborting) } - op := dtmimp.If(t.Status == dtmcli.StatusSubmitted, dtmcli.BranchConfirm, dtmcli.BranchCancel).(string) + op := dtmimp.If(t.Status == dtmcli.StatusSubmitted, dtmimp.OpConfirm, dtmimp.OpCancel).(string) for current := len(branches) - 1; current >= 0; current-- { if branches[current].Op == op && branches[current].Status == dtmcli.StatusPrepared { logger.Debugf("branch info: current: %d ID: %d", current, branches[current].ID) diff --git a/dtmsvr/trans_type_xa.go b/dtmsvr/trans_type_xa.go index 4f45205..173b9ed 100644 --- a/dtmsvr/trans_type_xa.go +++ b/dtmsvr/trans_type_xa.go @@ -30,7 +30,7 @@ func (t *transXaProcessor) ProcessOnce(branches []TransBranch) error { if t.Status == dtmcli.StatusPrepared && t.isTimeout() { t.changeStatus(dtmcli.StatusAborting) } - currentType := dtmimp.If(t.Status == dtmcli.StatusSubmitted, dtmcli.BranchCommit, dtmcli.BranchRollback).(string) + currentType := dtmimp.If(t.Status == dtmcli.StatusSubmitted, dtmimp.OpCommit, dtmimp.OpRollback).(string) for i, branch := range branches { if branch.Op == currentType && branch.Status != dtmcli.StatusSucceed { err := t.execBranch(&branch, i) diff --git a/test/base_test.go b/test/base_test.go index 31ef17d..68ea359 100644 --- a/test/base_test.go +++ b/test/base_test.go @@ -35,7 +35,7 @@ func TestBaseSqlDB(t *testing.T) { TransType: "saga", Gid: "gid2", BranchID: "branch_id2", - Op: dtmcli.BranchAction, + Op: dtmimp.OpAction, BarrierID: 1, } db.Must().Exec("insert into dtm_barrier.barrier(trans_type, gid, branch_id, op, barrier_id, reason) values('saga', 'gid1', 'branch_id1', 'action', '01', 'saga')") diff --git a/test/busi/base_http.go b/test/busi/base_http.go index 44bb262..6608603 100644 --- a/test/busi/base_http.go +++ b/test/busi/base_http.go @@ -194,7 +194,7 @@ func BaseAddRoute(app *gin.Engine) { } return nil })) - app.POST(BusiAPI+"/TccBSleepCancel", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { + app.POST(BusiAPI+"/SleepCancel", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { return sleepCancelHandler(c) })) app.POST(BusiAPI+"/TransOutHeaderYes", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { diff --git a/test/tcc_barrier_test.go b/test/tcc_barrier_test.go index 3774b31..bbafb2a 100644 --- a/test/tcc_barrier_test.go +++ b/test/tcc_barrier_test.go @@ -73,7 +73,7 @@ func runTestTccBarrierDisorder(t *testing.T, store string) { body := &busi.TransReq{Amount: 30, Store: store} tryURL := Busi + "/TccBTransOutTry" confirmURL := Busi + "/TccBTransOutConfirm" - cancelURL := Busi + "/TccBSleepCancel" + cancelURL := Busi + "/SleepCancel" // refer to time diagram for barrier, here we simulate it branchID := tcc.NewSubBranchID() busi.SetSleepCancelHandler(func(c *gin.Context) interface{} { @@ -88,13 +88,13 @@ func runTestTccBarrierDisorder(t *testing.T, store string) { // register tcc branch resp, err := dtmimp.RestyClient.R(). SetBody(map[string]interface{}{ - "gid": tcc.Gid, - "branch_id": branchID, - "trans_type": "tcc", - "status": StatusPrepared, - "data": string(dtmimp.MustMarshal(body)), - dtmcli.BranchConfirm: confirmURL, - dtmcli.BranchCancel: cancelURL, + "gid": tcc.Gid, + "branch_id": branchID, + "trans_type": "tcc", + "status": StatusPrepared, + "data": string(dtmimp.MustMarshal(body)), + dtmimp.OpConfirm: confirmURL, + dtmimp.OpCancel: cancelURL, }).Post(fmt.Sprintf("%s/%s", tcc.Dtm, "registerBranch")) assert.Nil(t, err) assert.Contains(t, resp.String(), dtmcli.ResultSuccess) @@ -121,7 +121,7 @@ func runTestTccBarrierDisorder(t *testing.T, store string) { "gid": tcc.Gid, "branch_id": branchID, "trans_type": "tcc", - "op": dtmcli.BranchTry, + "op": dtmimp.OpTry, }). Post(tryURL) assert.True(t, strings.Contains(r.String(), dtmcli.ResultSuccess)) // dangle op, return success From c55e5c45c7f6d0555113eecdf700c4502c5c2913 Mon Sep 17 00:00:00 2001 From: liulei Date: Fri, 18 Mar 2022 17:26:41 +0800 Subject: [PATCH 25/41] feat: add kratos driver --- go.mod | 7 ++++--- go.sum | 52 +++++++++++++++++++++++++++++++++++++++++----------- main.go | 1 + 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 94b2eb7..6b4c184 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 + github.com/dtm-labs/dtmdriver-kratos v0.0.0-00010101000000-000000000000 github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.7 @@ -22,10 +23,8 @@ require ( github.com/stretchr/testify v1.7.0 go.etcd.io/bbolt v1.3.6 go.mongodb.org/mongo-driver v1.8.3 - go.uber.org/atomic v1.9.0 // indirect go.uber.org/automaxprocs v1.4.1-0.20210525221652-0180b04c18a7 - go.uber.org/multierr v1.7.0 // indirect - go.uber.org/zap v1.19.1 + go.uber.org/zap v1.21.0 golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa // indirect google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 @@ -35,3 +34,5 @@ require ( gorm.io/gorm v1.22.2 // gotest.tools v2.2.0+incompatible ) + +replace github.com/dtm-labs/dtmdriver-kratos => /Users/liulei/Lessons/gopkg-src/dtmdriver-kratos diff --git a/go.sum b/go.sum index 17103b6..cf2d468 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -130,8 +131,9 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -146,6 +148,11 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kratos/aegis v0.1.1/go.mod h1:jYeSQ3Gesba478zEnujOiG5QdsyF3Xk/8owFUeKcHxw= +github.com/go-kratos/kratos/contrib/registry/etcd/v2 v2.0.0-20220301040457-03ad2b663624 h1:IvBtHmRYmHsB13TP21F1FgEtJuIXIASnucaUZKlvp4E= +github.com/go-kratos/kratos/contrib/registry/etcd/v2 v2.0.0-20220301040457-03ad2b663624/go.mod h1:wHDbj1lp8hvAg7Eq7iNFM4vh5Fl8kWIiH4E1YY+fixs= +github.com/go-kratos/kratos/v2 v2.2.0 h1:swSCoOdXD5F/L4eUfhapxSXe1I846hZz1wMLLixz9SA= +github.com/go-kratos/kratos/v2 v2.2.0/go.mod h1:yebXu5KMayLjXZzMTY5HWIPRDwcBehHpiNF/Ot8A2pA= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -158,6 +165,7 @@ github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= @@ -167,6 +175,7 @@ github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/form/v4 v4.2.0/go.mod h1:q1a2BY+AQUUzhl6xA/6hBetay6dEIhMHjgvJiGo6K7U= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= @@ -282,6 +291,7 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= @@ -478,6 +488,7 @@ github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThC github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/shirou/gopsutil/v3 v3.21.8/go.mod h1:YWp/H8Qs5fVmf17v7JNZzA0mPJ+mS2e9JdiUF9LlKzQ= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= @@ -510,6 +521,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= +github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= 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/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= @@ -532,12 +545,18 @@ github.com/zeromicro/go-zero v1.3.0 h1:Eyn36yBtR043sm4YKmxR6eS3UA/GtZDktQ+UqIJ3L github.com/zeromicro/go-zero v1.3.0/go.mod h1:Hy4o1VFAt32lXaQMbaBhoFeZjA/rJqJ4PTGNdGsURcc= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd/api/v3 v3.5.1 h1:v28cktvBq+7vGyJXF8G+rWJmj+1XUmMtqcLnH8hDocM= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.1 h1:XIQcHCFSG53bJETYeRJtIxdLv2EWRGxcfzR8lSnTH4E= +go.etcd.io/etcd/api/v3 v3.5.2 h1:tXok5yLlKyuQ/SXSjtqHc4uzNaMqZi2XsoSPr/LlJXI= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v3 v3.5.1 h1:oImGuV5LGKjCqXdjkMHCyWa5OO1gYKCnC/1sgdfj1Uk= +go.etcd.io/etcd/client/pkg/v3 v3.5.2 h1:4hzqQ6hIb3blLyQ8usCU4h3NghkqcsohEQ3o3VetYxE= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= +go.etcd.io/etcd/client/v3 v3.5.2 h1:WdnejrUtQC4nCxK0/dLTMqKOB+U5TP/2Ya0BJL+1otA= +go.etcd.io/etcd/client/v3 v3.5.2/go.mod h1:kOOaWFFgHygyT0WlSmL8TJiXmMysO/nNUlEsSsN6W4o= go.mongodb.org/mongo-driver v1.8.3 h1:TDKlTkGDKm9kkJVUOAXDK5/fkqKHJVwYQSpoRfB43R4= go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -564,21 +583,23 @@ go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhW go.uber.org/automaxprocs v1.4.1-0.20210525221652-0180b04c18a7 h1:dRxPYqUfp41vIUNfZhZRtI0TZf08Wf5BAwamC5H/DMI= go.uber.org/automaxprocs v1.4.1-0.20210525221652-0180b04c18a7/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= @@ -663,8 +684,9 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d h1:1n1fc535VhN8SYtD4cDUyNlfpAF2ROMM9+11equK3hs= golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -700,6 +722,7 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -730,11 +753,16 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320 h1:0jf+tOCoZ3LyutmCOWpVni1chK4VfFLhRsDK7MhqGRY= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -839,8 +867,10 @@ google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2 h1:z+R4M/SuyaRsj1zu3WC+nIQyfSrSIpuDcY01/R3uCtg= google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7 h1:ntPPoHzFW6Xp09ueznmahONZufyoSakK/piXnr2BU3I= +google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/main.go b/main.go index 813e920..dd5c791 100644 --- a/main.go +++ b/main.go @@ -21,6 +21,7 @@ import ( // load the microserver driver _ "github.com/dtm-labs/dtmdriver-gozero" + _ "github.com/dtm-labs/dtmdriver-kratos" _ "github.com/dtm-labs/dtmdriver-polaris" _ "github.com/dtm-labs/dtmdriver-protocol1" ) From de71e07e0dfe5ecbeb7b92fadf94361d7e9194f0 Mon Sep 17 00:00:00 2001 From: liulei Date: Fri, 18 Mar 2022 21:10:18 +0800 Subject: [PATCH 26/41] chore: change go mod deps --- go.mod | 4 +--- go.sum | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6b4c184..1fc8af8 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 - github.com/dtm-labs/dtmdriver-kratos v0.0.0-00010101000000-000000000000 + github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2 github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.7 @@ -34,5 +34,3 @@ require ( gorm.io/gorm v1.22.2 // gotest.tools v2.2.0+incompatible ) - -replace github.com/dtm-labs/dtmdriver-kratos => /Users/liulei/Lessons/gopkg-src/dtmdriver-kratos diff --git a/go.sum b/go.sum index cf2d468..f9af35f 100644 --- a/go.sum +++ b/go.sum @@ -107,6 +107,8 @@ github.com/dtm-labs/dtmdriver v0.0.1 h1:dHUZQ6g2ZN6eRUqds9kKq/3K7u9bcUGatUlbthD9 github.com/dtm-labs/dtmdriver v0.0.1/go.mod h1:fLiEeD2BPwM9Yq96TfcP9KpbTwFsn5nTxa/PP0jmFuk= github.com/dtm-labs/dtmdriver-gozero v0.0.2 h1:T+JH9kwVNMmISPU1BNviiTrvPdMA7UMFD+nfTqGPSyA= github.com/dtm-labs/dtmdriver-gozero v0.0.2/go.mod h1:5AAKwYok5f56e0kATOXvc+DAsfu4elISDuCV+G3+fYE= +github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2 h1:oTh5EWgcZ0eW2qjBscPc0SLK+IMbrEbrwqHowmSeP4c= +github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= github.com/dtm-labs/dtmdriver-polaris v0.0.4/go.mod h1:zwNFE3z0B7Ky35W2Ks9LkpMGiuIt9YFuocy4qaedCLE= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= From dc5b5c586895d1b10b7c8ea0655fd8a1df2f7870 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Fri, 18 Mar 2022 22:28:09 +0800 Subject: [PATCH 27/41] update dtmdriver-kratos to v0.0.1 --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 1fc8af8..c233b64 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 - github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2 + github.com/dtm-labs/dtmdriver-kratos v0.0.1 github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.7 diff --git a/go.sum b/go.sum index f9af35f..183ac13 100644 --- a/go.sum +++ b/go.sum @@ -109,6 +109,8 @@ github.com/dtm-labs/dtmdriver-gozero v0.0.2 h1:T+JH9kwVNMmISPU1BNviiTrvPdMA7UMFD github.com/dtm-labs/dtmdriver-gozero v0.0.2/go.mod h1:5AAKwYok5f56e0kATOXvc+DAsfu4elISDuCV+G3+fYE= github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2 h1:oTh5EWgcZ0eW2qjBscPc0SLK+IMbrEbrwqHowmSeP4c= github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= +github.com/dtm-labs/dtmdriver-kratos v0.0.1 h1:JP3qnY9b+jE0RJ1ax20tKBJHwZrhrqYg0M8eNxcpuIw= +github.com/dtm-labs/dtmdriver-kratos v0.0.1/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= github.com/dtm-labs/dtmdriver-polaris v0.0.4/go.mod h1:zwNFE3z0B7Ky35W2Ks9LkpMGiuIt9YFuocy4qaedCLE= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= From 95bc02492379d595be4f66ffdb0af4d7419cb00a Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Sat, 19 Mar 2022 09:52:12 +0800 Subject: [PATCH 28/41] update kratos driver --- dtmsvr/svr.go | 1 + go.mod | 4 +++- go.sum | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dtmsvr/svr.go b/dtmsvr/svr.go index 4fafd89..a9f266f 100644 --- a/dtmsvr/svr.go +++ b/dtmsvr/svr.go @@ -70,6 +70,7 @@ func StartSvr() { time.Sleep(100 * time.Millisecond) err = dtmdriver.Use(conf.MicroService.Driver) logger.FatalIfError(err) + logger.Infof("RegisterGrpcService: %s", conf.MicroService.Driver) err = dtmdriver.GetDriver().RegisterGrpcService(conf.MicroService.Target, conf.MicroService.EndPoint) logger.FatalIfError(err) } diff --git a/go.mod b/go.mod index c233b64..702a0d5 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 - github.com/dtm-labs/dtmdriver-kratos v0.0.1 + github.com/dtm-labs/dtmdriver-kratos v0.0.2 github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.7 @@ -34,3 +34,5 @@ require ( gorm.io/gorm v1.22.2 // gotest.tools v2.2.0+incompatible ) + +// replace github.com/dtm-labs/dtmdriver-kratos v0.0.1 => /Users/wangxi/dtm/dtmdriver-kratos diff --git a/go.sum b/go.sum index 183ac13..303e963 100644 --- a/go.sum +++ b/go.sum @@ -111,6 +111,8 @@ github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2 h1:oTh5E github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-kratos v0.0.1 h1:JP3qnY9b+jE0RJ1ax20tKBJHwZrhrqYg0M8eNxcpuIw= github.com/dtm-labs/dtmdriver-kratos v0.0.1/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= +github.com/dtm-labs/dtmdriver-kratos v0.0.2 h1:/Tw1X9lvGOVXjc+cY6omMoODr16b4V5cim+w19ZeGAA= +github.com/dtm-labs/dtmdriver-kratos v0.0.2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= github.com/dtm-labs/dtmdriver-polaris v0.0.4/go.mod h1:zwNFE3z0B7Ky35W2Ks9LkpMGiuIt9YFuocy4qaedCLE= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= From ada9cf263db360a64ea8cfe0368f352136aaf954 Mon Sep 17 00:00:00 2001 From: liulei Date: Sat, 19 Mar 2022 20:22:13 +0800 Subject: [PATCH 29/41] chore: upgrade dtmdriver-kratos version --- go.mod | 4 +--- go.sum | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 702a0d5..6861b95 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 - github.com/dtm-labs/dtmdriver-kratos v0.0.2 + github.com/dtm-labs/dtmdriver-kratos v0.0.3 github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.7 @@ -34,5 +34,3 @@ require ( gorm.io/gorm v1.22.2 // gotest.tools v2.2.0+incompatible ) - -// replace github.com/dtm-labs/dtmdriver-kratos v0.0.1 => /Users/wangxi/dtm/dtmdriver-kratos diff --git a/go.sum b/go.sum index 303e963..215f90a 100644 --- a/go.sum +++ b/go.sum @@ -113,6 +113,8 @@ github.com/dtm-labs/dtmdriver-kratos v0.0.1 h1:JP3qnY9b+jE0RJ1ax20tKBJHwZrhrqYg0 github.com/dtm-labs/dtmdriver-kratos v0.0.1/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-kratos v0.0.2 h1:/Tw1X9lvGOVXjc+cY6omMoODr16b4V5cim+w19ZeGAA= github.com/dtm-labs/dtmdriver-kratos v0.0.2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= +github.com/dtm-labs/dtmdriver-kratos v0.0.3 h1:a09mvcGEqXf0DzjHOVR/UJnOGAMAwjfJ3LMG6z9092Q= +github.com/dtm-labs/dtmdriver-kratos v0.0.3/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= github.com/dtm-labs/dtmdriver-polaris v0.0.4/go.mod h1:zwNFE3z0B7Ky35W2Ks9LkpMGiuIt9YFuocy4qaedCLE= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= From ae4c033624b462179897b59c27f770a8614c09c9 Mon Sep 17 00:00:00 2001 From: liulei Date: Sat, 19 Mar 2022 22:03:14 +0800 Subject: [PATCH 30/41] chore: update dtmdriver-kratos version --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 6861b95..4df247e 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 - github.com/dtm-labs/dtmdriver-kratos v0.0.3 + github.com/dtm-labs/dtmdriver-kratos v0.0.4 // indirect github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.7 diff --git a/go.sum b/go.sum index 215f90a..725f08d 100644 --- a/go.sum +++ b/go.sum @@ -115,6 +115,8 @@ github.com/dtm-labs/dtmdriver-kratos v0.0.2 h1:/Tw1X9lvGOVXjc+cY6omMoODr16b4V5ci github.com/dtm-labs/dtmdriver-kratos v0.0.2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-kratos v0.0.3 h1:a09mvcGEqXf0DzjHOVR/UJnOGAMAwjfJ3LMG6z9092Q= github.com/dtm-labs/dtmdriver-kratos v0.0.3/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= +github.com/dtm-labs/dtmdriver-kratos v0.0.4 h1:jDVvrwiw8GwVrampIxhoXZ9TewwQKHFpcDcQXyU2Qyc= +github.com/dtm-labs/dtmdriver-kratos v0.0.4/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= github.com/dtm-labs/dtmdriver-polaris v0.0.4/go.mod h1:zwNFE3z0B7Ky35W2Ks9LkpMGiuIt9YFuocy4qaedCLE= github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 h1:nwGpGWi7XlUAcDhEw1qZ3TheBskqCvfE96n1uVjmDf4= From fa84773948f00d8db504f33df3acd1afeffc78c5 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Sun, 20 Mar 2022 09:24:23 +0800 Subject: [PATCH 31/41] add kratos support in readme --- helper/README-cn.md | 1 + 1 file changed, 1 insertion(+) diff --git a/helper/README-cn.md b/helper/README-cn.md index 1d98278..282bf6e 100644 --- a/helper/README-cn.md +++ b/helper/README-cn.md @@ -69,6 +69,7 @@ DTM是一款变革性的分布式事务框架,提供了傻瓜式的使用方 ## 微服务框架支持 - [go-zero](https://github.com/zeromicro/go-zero):一开源就非常火爆的微服务框架,首家接入dtm的微服务框架。感谢go-zero作者[kevwan](https://github.com/kevwan)的大力支持 +- [kratos](https://github.com/go-kratos/kratos):这是bilibili开源的一个微服务框架。感谢[lei liu](https://github.com/Leizhengzi)的贡献 - [polaris](https://github.com/polarismesh/polaris): 腾讯开源的注册发现组件,以及在其上构建的微服务框架。感谢腾讯同学[ychensha](https://github.com/ychensha)的PR - 其他:看用户需求量,择机接入,参见[微服务支持](https://dtm.pub/ref/proto.html) From f9cca239ef449c19e6faa5c71c07429dce2fc487 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Tue, 22 Mar 2022 09:09:55 +0800 Subject: [PATCH 32/41] xa callback use pooled db --- dtmcli/dtmimp/trans_xa_base.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/dtmcli/dtmimp/trans_xa_base.go b/dtmcli/dtmimp/trans_xa_base.go index f934a15..6d633c7 100644 --- a/dtmcli/dtmimp/trans_xa_base.go +++ b/dtmcli/dtmimp/trans_xa_base.go @@ -20,13 +20,10 @@ type XaClientBase struct { // HandleCallback Handle the callback of commit/rollback func (xc *XaClientBase) HandleCallback(gid string, branchID string, action string) error { - db, err := StandaloneDB(xc.Conf) + db, err := PooledDB(xc.Conf) if err != nil { return err } - defer func() { - _ = db.Close() - }() xaID := gid + "-" + branchID _, err = DBExec(db, GetDBSpecial().GetXaSQL(action, xaID)) if err != nil && From d20459f964f036216dbbca44701fd2e569b9228f Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Thu, 24 Mar 2022 21:56:07 +0800 Subject: [PATCH 33/41] xa use new interface --- dtmcli/dtmimp/trans_base.go | 18 ++++++----- dtmcli/dtmimp/trans_xa_base.go | 29 +++++++----------- dtmcli/trans_test.go | 5 --- dtmcli/xa.go | 56 +++++++++++----------------------- dtmgrpc/dtmgimp/types.go | 3 ++ dtmgrpc/dtmgimp/utils.go | 5 +++ dtmgrpc/xa.go | 50 +++++++++--------------------- go.mod | 2 +- go.sum | 8 ----- test/busi/base_grpc.go | 18 ++--------- test/busi/base_http.go | 16 ++-------- test/xa_cover_test.go | 15 ++++----- test/xa_grpc_test.go | 14 +++------ test/xa_test.go | 17 +++++------ 14 files changed, 86 insertions(+), 170 deletions(-) diff --git a/dtmcli/dtmimp/trans_base.go b/dtmcli/dtmimp/trans_base.go index a1a136f..ec30d6b 100644 --- a/dtmcli/dtmimp/trans_base.go +++ b/dtmcli/dtmimp/trans_base.go @@ -142,15 +142,19 @@ func TransRequestBranch(t *TransBase, method string, body interface{}, branchID if url == "" { return nil, nil } + query := map[string]string{ + "dtm": t.Dtm, + "gid": t.Gid, + "branch_id": branchID, + "trans_type": t.TransType, + "op": op, + } + if t.TransType == "xa" { // xa trans will add notify_url + query["phase2_url"] = url + } resp, err := RestyClient.R(). SetBody(body). - SetQueryParams(map[string]string{ - "dtm": t.Dtm, - "gid": t.Gid, - "branch_id": branchID, - "trans_type": t.TransType, - "op": op, - }). + SetQueryParams(query). SetHeaders(t.BranchHeaders). Execute(method, url) if err == nil { diff --git a/dtmcli/dtmimp/trans_xa_base.go b/dtmcli/dtmimp/trans_xa_base.go index 6d633c7..6404c31 100644 --- a/dtmcli/dtmimp/trans_xa_base.go +++ b/dtmcli/dtmimp/trans_xa_base.go @@ -11,36 +11,29 @@ import ( "strings" ) -// XaClientBase XaClient/XaGrpcClient base. shared by http and grpc -type XaClientBase struct { - Server string - Conf DBConf - NotifyURL string -} - -// HandleCallback Handle the callback of commit/rollback -func (xc *XaClientBase) HandleCallback(gid string, branchID string, action string) error { - db, err := PooledDB(xc.Conf) +// XaHandlePhase2 Handle the callback of commit/rollback +func XaHandlePhase2(gid string, dbConf DBConf, branchID string, op string) error { + db, err := PooledDB(dbConf) if err != nil { return err } xaID := gid + "-" + branchID - _, err = DBExec(db, GetDBSpecial().GetXaSQL(action, xaID)) + _, err = DBExec(db, GetDBSpecial().GetXaSQL(op, xaID)) if err != nil && (strings.Contains(err.Error(), "XAER_NOTA") || strings.Contains(err.Error(), "does not exist")) { // Repeat commit/rollback with the same id, report this error, ignore err = nil } - if action == OpRollback && err == nil { + if op == OpRollback && err == nil { // rollback insert a row after prepare. no-error means prepare has finished. - _, err = InsertBarrier(db, "xa", gid, branchID, OpAction, XaBarrier1, action) + _, err = InsertBarrier(db, "xa", gid, branchID, OpAction, XaBarrier1, op) } return err } -// HandleLocalTrans public handler of LocalTransaction via http/grpc -func (xc *XaClientBase) HandleLocalTrans(xa *TransBase, cb func(*sql.DB) error) (rerr error) { +// XaHandleLocalTrans public handler of LocalTransaction via http/grpc +func XaHandleLocalTrans(xa *TransBase, dbConf DBConf, cb func(*sql.DB) error) (rerr error) { xaBranch := xa.Gid + "-" + xa.BranchID - db, rerr := StandaloneDB(xc.Conf) + db, rerr := StandaloneDB(dbConf) if rerr != nil { return } @@ -66,8 +59,8 @@ func (xc *XaClientBase) HandleLocalTrans(xa *TransBase, cb func(*sql.DB) error) return } -// HandleGlobalTrans http/grpc GlobalTransaction shared func -func (xc *XaClientBase) HandleGlobalTrans(xa *TransBase, callDtm func(string) error, callBusi func() error) (rerr error) { +// XaHandleGlobalTrans http/grpc GlobalTransaction shared func +func XaHandleGlobalTrans(xa *TransBase, callDtm func(string) error, callBusi func() error) (rerr error) { rerr = callDtm("prepare") if rerr != nil { return diff --git a/dtmcli/trans_test.go b/dtmcli/trans_test.go index 05e6ab4..66a0459 100644 --- a/dtmcli/trans_test.go +++ b/dtmcli/trans_test.go @@ -23,8 +23,3 @@ func TestQuery(t *testing.T) { _, err = BarrierFromQuery(qs) assert.Error(t, err) } - -func TestXa(t *testing.T) { - _, err := NewXaClient("http://localhost:36789", DBConf{}, ":::::", nil) - assert.Error(t, err) -} diff --git a/dtmcli/xa.go b/dtmcli/xa.go index e2b8d01..662f8d6 100644 --- a/dtmcli/xa.go +++ b/dtmcli/xa.go @@ -21,76 +21,54 @@ type XaGlobalFunc func(xa *Xa) (*resty.Response, error) // XaLocalFunc type of xa local function type XaLocalFunc func(db *sql.DB, xa *Xa) error -// XaRegisterCallback type of xa register callback handler -type XaRegisterCallback func(path string, xa *XaClient) - -// XaClient xa client -type XaClient struct { - dtmimp.XaClientBase -} - // Xa xa transaction type Xa struct { dtmimp.TransBase + Phase2URL string } // XaFromQuery construct xa info from request func XaFromQuery(qs url.Values) (*Xa, error) { xa := &Xa{TransBase: *dtmimp.TransBaseFromQuery(qs)} - if xa.Gid == "" || xa.BranchID == "" { - return nil, fmt.Errorf("bad xa info: gid: %s branchid: %s", xa.Gid, xa.BranchID) + xa.Op = dtmimp.EscapeGet(qs, "op") + xa.Phase2URL = dtmimp.EscapeGet(qs, "phase2_url") + if xa.Gid == "" || xa.BranchID == "" || xa.Op == "" { + return nil, fmt.Errorf("bad xa info: gid: %s branchid: %s op: %s phase2_url: %s", xa.Gid, xa.BranchID, xa.Op, xa.Phase2URL) } return xa, nil } -// NewXaClient construct a xa client -func NewXaClient(server string, mysqlConf DBConf, notifyURL string, register XaRegisterCallback) (*XaClient, error) { - xa := &XaClient{XaClientBase: dtmimp.XaClientBase{ - Server: server, - Conf: mysqlConf, - NotifyURL: notifyURL, - }} - u, err := url.Parse(notifyURL) - if err != nil { - return nil, err - } - register(u.Path, xa) - return xa, nil -} - -// HandleCallback handle commit/rollback callback -func (xc *XaClient) HandleCallback(gid string, branchID string, action string) interface{} { - return xc.XaClientBase.HandleCallback(gid, branchID, action) -} - // XaLocalTransaction start a xa local transaction -func (xc *XaClient) XaLocalTransaction(qs url.Values, xaFunc XaLocalFunc) error { +func XaLocalTransaction(qs url.Values, dbConf DBConf, xaFunc XaLocalFunc) error { xa, err := XaFromQuery(qs) if err != nil { return err } - return xc.HandleLocalTrans(&xa.TransBase, func(db *sql.DB) error { + if xa.Op == dtmimp.OpCommit || xa.Op == dtmimp.OpRollback { + return dtmimp.XaHandlePhase2(xa.Gid, dbConf, xa.BranchID, xa.Op) + } + return dtmimp.XaHandleLocalTrans(&xa.TransBase, dbConf, func(db *sql.DB) error { err := xaFunc(db, xa) if err != nil { return err } return dtmimp.TransRegisterBranch(&xa.TransBase, map[string]string{ - "url": xc.XaClientBase.NotifyURL, + "url": xa.Phase2URL, "branch_id": xa.BranchID, }, "registerBranch") }) } // XaGlobalTransaction start a xa global transaction -func (xc *XaClient) XaGlobalTransaction(gid string, xaFunc XaGlobalFunc) (rerr error) { - return xc.XaGlobalTransaction2(gid, func(x *Xa) {}, xaFunc) +func XaGlobalTransaction(server string, gid string, xaFunc XaGlobalFunc) error { + return XaGlobalTransaction2(server, gid, func(x *Xa) {}, xaFunc) } -// XaGlobalTransaction2 start a xa global transaction -func (xc *XaClient) XaGlobalTransaction2(gid string, custom func(*Xa), xaFunc XaGlobalFunc) (rerr error) { - xa := &Xa{TransBase: *dtmimp.NewTransBase(gid, "xa", xc.XaClientBase.Server, "")} +// XaGlobalTransaction2 start a xa global transaction with xa custom function +func XaGlobalTransaction2(server string, gid string, custom func(*Xa), xaFunc XaGlobalFunc) (rerr error) { + xa := &Xa{TransBase: *dtmimp.NewTransBase(gid, "xa", server, "")} custom(xa) - return xc.HandleGlobalTrans(&xa.TransBase, func(action string) error { + return dtmimp.XaHandleGlobalTrans(&xa.TransBase, func(action string) error { return dtmimp.TransCallDtm(&xa.TransBase, xa, action) }, func() error { _, rerr := xaFunc(xa) diff --git a/dtmgrpc/dtmgimp/types.go b/dtmgrpc/dtmgimp/types.go index 2b6a653..bb7fcaf 100644 --- a/dtmgrpc/dtmgimp/types.go +++ b/dtmgrpc/dtmgimp/types.go @@ -58,5 +58,8 @@ func InvokeBranch(t *dtmimp.TransBase, isRaw bool, msg proto.Message, url string } ctx := TransInfo2Ctx(t.Gid, t.TransType, branchID, op, t.Dtm) ctx = metadata.AppendToOutgoingContext(ctx, Map2Kvs(t.BranchHeaders)...) + if t.TransType == "xa" { // xa branch need addtional phase2_url + ctx = metadata.AppendToOutgoingContext(ctx, Map2Kvs(map[string]string{dtmpre + "phase2_url": url})...) + } return MustGetGrpcConn(server, isRaw).Invoke(ctx, method, msg, reply) } diff --git a/dtmgrpc/dtmgimp/utils.go b/dtmgrpc/dtmgimp/utils.go index 17aaa11..0e46c70 100644 --- a/dtmgrpc/dtmgimp/utils.go +++ b/dtmgrpc/dtmgimp/utils.go @@ -102,6 +102,11 @@ func GetMetaFromContext(ctx context.Context, name string) string { return mdGet(md, name) } +func GetDtmMetaFromContext(ctx context.Context, name string) string { + md, _ := metadata.FromIncomingContext(ctx) + return dtmGet(md, name) +} + type requestTimeoutKey struct{} // RequestTimeoutFromContext returns requestTime of transOption option diff --git a/dtmgrpc/xa.go b/dtmgrpc/xa.go index 37f7cfc..7ab34d7 100644 --- a/dtmgrpc/xa.go +++ b/dtmgrpc/xa.go @@ -26,14 +26,10 @@ type XaGrpcGlobalFunc func(xa *XaGrpc) error // XaGrpcLocalFunc type of xa local function type XaGrpcLocalFunc func(db *sql.DB, xa *XaGrpc) error -// XaGrpcClient xa client -type XaGrpcClient struct { - dtmimp.XaClientBase -} - // XaGrpc xa transaction type XaGrpc struct { dtmimp.TransBase + Phase2URL string } // XaGrpcFromRequest construct xa info from request @@ -41,39 +37,23 @@ func XaGrpcFromRequest(ctx context.Context) (*XaGrpc, error) { xa := &XaGrpc{ TransBase: *dtmgimp.TransBaseFromGrpc(ctx), } - if xa.Gid == "" || xa.BranchID == "" { - return nil, fmt.Errorf("bad xa info: gid: %s branchid: %s", xa.Gid, xa.BranchID) + xa.Phase2URL = dtmgimp.GetDtmMetaFromContext(ctx, "phase2_url") + if xa.Gid == "" || xa.BranchID == "" || xa.Op == "" { + return nil, fmt.Errorf("bad xa info: gid: %s branchid: %s op: %s phase2_url: %s", xa.Gid, xa.BranchID, xa.Op, xa.Phase2URL) } return xa, nil } -// NewXaGrpcClient construct a xa client -func NewXaGrpcClient(server string, mysqlConf dtmcli.DBConf, notifyURL string) *XaGrpcClient { - xa := &XaGrpcClient{XaClientBase: dtmimp.XaClientBase{ - Server: server, - Conf: mysqlConf, - NotifyURL: notifyURL, - }} - return xa -} - -// HandleCallback handle commit/rollback callback -func (xc *XaGrpcClient) HandleCallback(ctx context.Context) (*emptypb.Empty, error) { - tb := dtmgimp.TransBaseFromGrpc(ctx) - return &emptypb.Empty{}, xc.XaClientBase.HandleCallback(tb.Gid, tb.BranchID, tb.Op) -} - // XaLocalTransaction start a xa local transaction -func (xc *XaGrpcClient) XaLocalTransaction(ctx context.Context, msg proto.Message, xaFunc XaGrpcLocalFunc) error { +func XaLocalTransaction(ctx context.Context, dbConf dtmcli.DBConf, xaFunc XaGrpcLocalFunc) error { xa, err := XaGrpcFromRequest(ctx) if err != nil { return err } - data, err := proto.Marshal(msg) - if err != nil { - return err + if xa.Op == dtmimp.OpCommit || xa.Op == dtmimp.OpRollback { + return dtmimp.XaHandlePhase2(xa.Gid, dbConf, xa.BranchID, xa.Op) } - return xc.HandleLocalTrans(&xa.TransBase, func(db *sql.DB) error { + return dtmimp.XaHandleLocalTrans(&xa.TransBase, dbConf, func(db *sql.DB) error { err := xaFunc(db, xa) if err != nil { return err @@ -82,28 +62,28 @@ func (xc *XaGrpcClient) XaLocalTransaction(ctx context.Context, msg proto.Messag Gid: xa.Gid, BranchID: xa.BranchID, TransType: xa.TransType, - BusiPayload: data, - Data: map[string]string{"url": xc.NotifyURL}, + BusiPayload: nil, + Data: map[string]string{"url": xa.Phase2URL}, }) return err }) } // XaGlobalTransaction start a xa global transaction -func (xc *XaGrpcClient) XaGlobalTransaction(gid string, xaFunc XaGrpcGlobalFunc) error { - return xc.XaGlobalTransaction2(gid, func(xg *XaGrpc) {}, xaFunc) +func XaGlobalTransaction(server string, gid string, xaFunc XaGrpcGlobalFunc) error { + return XaGlobalTransaction2(server, gid, func(xg *XaGrpc) {}, xaFunc) } // XaGlobalTransaction2 new version of XaGlobalTransaction. support custom -func (xc *XaGrpcClient) XaGlobalTransaction2(gid string, custom func(*XaGrpc), xaFunc XaGrpcGlobalFunc) error { - xa := &XaGrpc{TransBase: *dtmimp.NewTransBase(gid, "xa", xc.Server, "")} +func XaGlobalTransaction2(server string, gid string, custom func(*XaGrpc), xaFunc XaGrpcGlobalFunc) error { + xa := &XaGrpc{TransBase: *dtmimp.NewTransBase(gid, "xa", server, "")} custom(xa) dc := dtmgimp.MustGetDtmClient(xa.Dtm) req := &dtmgpb.DtmRequest{ Gid: gid, TransType: xa.TransType, } - return xc.HandleGlobalTrans(&xa.TransBase, func(action string) error { + return dtmimp.XaHandleGlobalTrans(&xa.TransBase, func(action string) error { f := map[string]func(context.Context, *dtmgpb.DtmRequest, ...grpc.CallOption) (*emptypb.Empty, error){ "prepare": dc.Prepare, "submit": dc.Submit, diff --git a/go.mod b/go.mod index 4df247e..5d9206a 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v0.4.1 // indirect github.com/dtm-labs/dtmdriver v0.0.1 github.com/dtm-labs/dtmdriver-gozero v0.0.2 - github.com/dtm-labs/dtmdriver-kratos v0.0.4 // indirect + github.com/dtm-labs/dtmdriver-kratos v0.0.4 github.com/dtm-labs/dtmdriver-polaris v0.0.4 github.com/dtm-labs/dtmdriver-protocol1 v0.0.1 github.com/gin-gonic/gin v1.7.7 diff --git a/go.sum b/go.sum index 725f08d..c67d3e1 100644 --- a/go.sum +++ b/go.sum @@ -107,14 +107,6 @@ github.com/dtm-labs/dtmdriver v0.0.1 h1:dHUZQ6g2ZN6eRUqds9kKq/3K7u9bcUGatUlbthD9 github.com/dtm-labs/dtmdriver v0.0.1/go.mod h1:fLiEeD2BPwM9Yq96TfcP9KpbTwFsn5nTxa/PP0jmFuk= github.com/dtm-labs/dtmdriver-gozero v0.0.2 h1:T+JH9kwVNMmISPU1BNviiTrvPdMA7UMFD+nfTqGPSyA= github.com/dtm-labs/dtmdriver-gozero v0.0.2/go.mod h1:5AAKwYok5f56e0kATOXvc+DAsfu4elISDuCV+G3+fYE= -github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2 h1:oTh5EWgcZ0eW2qjBscPc0SLK+IMbrEbrwqHowmSeP4c= -github.com/dtm-labs/dtmdriver-kratos v0.0.0-20220318113458-787275b94ed2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= -github.com/dtm-labs/dtmdriver-kratos v0.0.1 h1:JP3qnY9b+jE0RJ1ax20tKBJHwZrhrqYg0M8eNxcpuIw= -github.com/dtm-labs/dtmdriver-kratos v0.0.1/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= -github.com/dtm-labs/dtmdriver-kratos v0.0.2 h1:/Tw1X9lvGOVXjc+cY6omMoODr16b4V5cim+w19ZeGAA= -github.com/dtm-labs/dtmdriver-kratos v0.0.2/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= -github.com/dtm-labs/dtmdriver-kratos v0.0.3 h1:a09mvcGEqXf0DzjHOVR/UJnOGAMAwjfJ3LMG6z9092Q= -github.com/dtm-labs/dtmdriver-kratos v0.0.3/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-kratos v0.0.4 h1:jDVvrwiw8GwVrampIxhoXZ9TewwQKHFpcDcQXyU2Qyc= github.com/dtm-labs/dtmdriver-kratos v0.0.4/go.mod h1:MjrFIa2A191ATVb/xy2vnA2ZKqMK9zC/1m3pjxXwkac= github.com/dtm-labs/dtmdriver-polaris v0.0.4 h1:yli0YmAsEgl47ymJHTxIzULeNe5dnmfN2ixLJRWm2Ok= diff --git a/test/busi/base_grpc.go b/test/busi/base_grpc.go index cb1032f..ff7daf1 100644 --- a/test/busi/base_grpc.go +++ b/test/busi/base_grpc.go @@ -18,7 +18,6 @@ import ( "github.com/dtm-labs/dtm/dtmcli/logger" "github.com/dtm-labs/dtm/dtmgrpc" "github.com/dtm-labs/dtm/dtmutil" - "github.com/gin-gonic/gin" "github.com/dtm-labs/dtm/dtmgrpc/dtmgimp" "github.com/dtm-labs/dtm/dtmgrpc/dtmgpb" @@ -33,15 +32,6 @@ var BusiGrpc = fmt.Sprintf("localhost:%d", BusiGrpcPort) // DtmClient grpc client for dtm var DtmClient dtmgpb.DtmClient -// XaGrpcClient XA client connection -var XaGrpcClient *dtmgrpc.XaGrpcClient - -func init() { - setupFuncs["XaGrpcSetup"] = func(app *gin.Engine) { - XaGrpcClient = dtmgrpc.NewXaGrpcClient(dtmutil.DefaultGrpcServer, BusiConf, BusiGrpc+"/busi.Busi/XaNotify") - } -} - // GrpcStartup for grpc func GrpcStartup() { conn, err := grpc.Dial(dtmutil.DefaultGrpcServer, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithUnaryInterceptor(dtmgimp.GrpcClientLog)) @@ -105,13 +95,13 @@ func (s *busiServer) TransOutTcc(ctx context.Context, in *BusiReq) (*emptypb.Emp } func (s *busiServer) TransInXa(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) { - return &emptypb.Empty{}, XaGrpcClient.XaLocalTransaction(ctx, in, func(db *sql.DB, xa *dtmgrpc.XaGrpc) error { + return &emptypb.Empty{}, dtmgrpc.XaLocalTransaction(ctx, BusiConf, func(db *sql.DB, xa *dtmgrpc.XaGrpc) error { return sagaGrpcAdjustBalance(db, TransInUID, in.Amount, in.TransInResult) }) } func (s *busiServer) TransOutXa(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) { - return &emptypb.Empty{}, XaGrpcClient.XaLocalTransaction(ctx, in, func(db *sql.DB, xa *dtmgrpc.XaGrpc) error { + return &emptypb.Empty{}, dtmgrpc.XaLocalTransaction(ctx, BusiConf, func(db *sql.DB, xa *dtmgrpc.XaGrpc) error { return sagaGrpcAdjustBalance(db, TransOutUID, in.Amount, in.TransOutResult) }) } @@ -125,10 +115,6 @@ func (s *busiServer) TransInTccNested(ctx context.Context, in *BusiReq) (*emptyp return r, handleGrpcBusiness(in, MainSwitch.TransInResult.Fetch(), in.TransInResult, dtmimp.GetFuncName()) } -func (s *busiServer) XaNotify(ctx context.Context, in *emptypb.Empty) (*emptypb.Empty, error) { - return XaGrpcClient.HandleCallback(ctx) -} - func (s *busiServer) TransOutHeaderYes(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) { meta := dtmgimp.GetMetaFromContext(ctx, "test_header") if meta == "" { diff --git a/test/busi/base_http.go b/test/busi/base_http.go index 6608603..6018e69 100644 --- a/test/busi/base_http.go +++ b/test/busi/base_http.go @@ -37,9 +37,6 @@ var setupFuncs = map[string]setupFunc{} // Busi busi service url prefix var Busi = fmt.Sprintf("http://localhost:%d%s", BusiPort, BusiAPI) -// XaClient 1 -var XaClient *dtmcli.XaClient - // SleepCancelHandler 1 type SleepCancelHandler func(c *gin.Context) interface{} @@ -63,13 +60,6 @@ func BaseAppStartup() *gin.Engine { } c.Next() }) - var err error - XaClient, err = dtmcli.NewXaClient(dtmutil.DefaultHTTPServer, BusiConf, Busi+"/xa", func(path string, xa *dtmcli.XaClient) { - app.POST(path, dtmutil.WrapHandler2(func(c *gin.Context) interface{} { - return xa.HandleCallback(c.Query("gid"), c.Query("branch_id"), c.Query("op")) - })) - }) - logger.FatalIfError(err) BaseAddRoute(app) addJrpcRoute(app) @@ -144,12 +134,12 @@ func BaseAddRoute(app *gin.Engine) { return bb.MongoQueryPrepared(MongoGet()) })) app.POST(BusiAPI+"/TransInXa", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { - return XaClient.XaLocalTransaction(c.Request.URL.Query(), func(db *sql.DB, xa *dtmcli.Xa) error { + return dtmcli.XaLocalTransaction(c.Request.URL.Query(), BusiConf, func(db *sql.DB, xa *dtmcli.Xa) error { return SagaAdjustBalance(db, TransInUID, reqFrom(c).Amount, reqFrom(c).TransInResult) }) })) app.POST(BusiAPI+"/TransOutXa", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { - return XaClient.XaLocalTransaction(c.Request.URL.Query(), func(db *sql.DB, xa *dtmcli.Xa) error { + return dtmcli.XaLocalTransaction(c.Request.URL.Query(), BusiConf, func(db *sql.DB, xa *dtmcli.Xa) error { return SagaAdjustBalance(db, TransOutUID, reqFrom(c).Amount, reqFrom(c).TransOutResult) }) })) @@ -167,7 +157,7 @@ func BaseAddRoute(app *gin.Engine) { return resp })) app.POST(BusiAPI+"/TransOutXaGorm", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { - return XaClient.XaLocalTransaction(c.Request.URL.Query(), func(db *sql.DB, xa *dtmcli.Xa) error { + return dtmcli.XaLocalTransaction(c.Request.URL.Query(), BusiConf, func(db *sql.DB, xa *dtmcli.Xa) error { if reqFrom(c).TransOutResult == dtmcli.ResultFailure { return dtmcli.ErrFailure } diff --git a/test/xa_cover_test.go b/test/xa_cover_test.go index 673a58b..6836582 100644 --- a/test/xa_cover_test.go +++ b/test/xa_cover_test.go @@ -11,39 +11,36 @@ import ( ) func TestXaCoverDBError(t *testing.T) { - oldDriver := getXc().Conf.Driver + oldDriver := busi.BusiConf.Driver gid := dtmimp.GetFuncName() - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(DtmServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { req := busi.GenTransReq(30, false, false) _, err := xa.CallBranch(req, busi.Busi+"/TransOutXa") assert.Nil(t, err) - getXc().Conf.Driver = "no-driver" + busi.BusiConf.Driver = "no-driver" _, err = xa.CallBranch(req, busi.Busi+"/TransInXa") assert.Error(t, err) return nil, err }) assert.Error(t, err) waitTransProcessed(gid) - getXc().Conf.Driver = oldDriver + busi.BusiConf.Driver = oldDriver cronTransOnceForwardNow(t, gid, 500) // rollback succeeded here assert.Equal(t, StatusFailed, getTransStatus(gid)) assert.Equal(t, []string{StatusSucceed, StatusPrepared}, getBranchesStatus(gid)) } func TestXaCoverDTMError(t *testing.T) { - oldServer := getXc().Server - getXc().Server = "localhost:01" gid := dtmimp.GetFuncName() - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction("localhost:01", gid, func(xa *dtmcli.Xa) (*resty.Response, error) { return nil, nil }) assert.Error(t, err) - getXc().Server = oldServer } func TestXaCoverGidError(t *testing.T) { gid := dtmimp.GetFuncName() + "-' '" - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(DtmServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { req := busi.GenTransReq(30, false, false) _, err := xa.CallBranch(req, busi.Busi+"/TransOutXa") assert.Error(t, err) diff --git a/test/xa_grpc_test.go b/test/xa_grpc_test.go index 890d129..678dac6 100644 --- a/test/xa_grpc_test.go +++ b/test/xa_grpc_test.go @@ -18,12 +18,9 @@ import ( "google.golang.org/protobuf/types/known/emptypb" ) -func getXcg() *dtmgrpc.XaGrpcClient { - return busi.XaGrpcClient -} func TestXaGrpcNormal(t *testing.T) { gid := dtmimp.GetFuncName() - err := getXcg().XaGlobalTransaction(gid, func(xa *dtmgrpc.XaGrpc) error { + err := dtmgrpc.XaGlobalTransaction(DtmGrpcServer, gid, func(xa *dtmgrpc.XaGrpc) error { req := busi.GenBusiReq(30, false, false) r := &emptypb.Empty{} err := xa.CallBranch(req, busi.BusiGrpc+"/busi.Busi/TransOutXa", r) @@ -40,7 +37,7 @@ func TestXaGrpcNormal(t *testing.T) { func TestXaGrpcRollback(t *testing.T) { gid := dtmimp.GetFuncName() - err := getXcg().XaGlobalTransaction(gid, func(xa *dtmgrpc.XaGrpc) error { + err := dtmgrpc.XaGlobalTransaction(DtmGrpcServer, gid, func(xa *dtmgrpc.XaGrpc) error { req := busi.GenBusiReq(30, false, true) r := &emptypb.Empty{} err := xa.CallBranch(req, busi.BusiGrpc+"/busi.Busi/TransOutXa", r) @@ -60,11 +57,11 @@ func TestXaGrpcType(t *testing.T) { _, err := dtmgrpc.XaGrpcFromRequest(context.Background()) assert.Error(t, err) - err = busi.XaGrpcClient.XaLocalTransaction(context.Background(), nil, nil) + err = dtmgrpc.XaLocalTransaction(context.Background(), busi.BusiConf, nil) assert.Error(t, err) err = dtmimp.CatchP(func() { - busi.XaGrpcClient.XaGlobalTransaction(gid, func(xa *dtmgrpc.XaGrpc) error { panic(fmt.Errorf("hello")) }) + dtmgrpc.XaGlobalTransaction(DtmGrpcServer, gid, func(xa *dtmgrpc.XaGrpc) error { panic(fmt.Errorf("hello")) }) }) assert.Error(t, err) waitTransProcessed(gid) @@ -72,8 +69,7 @@ func TestXaGrpcType(t *testing.T) { func TestXaGrpcLocalError(t *testing.T) { gid := dtmimp.GetFuncName() - xc := busi.XaGrpcClient - err := xc.XaGlobalTransaction(gid, func(xa *dtmgrpc.XaGrpc) error { + err := dtmgrpc.XaGlobalTransaction(DtmGrpcServer, gid, func(xa *dtmgrpc.XaGrpc) error { return fmt.Errorf("an error") }) assert.Error(t, err, fmt.Errorf("an error")) diff --git a/test/xa_test.go b/test/xa_test.go index 6da797a..4980a0a 100644 --- a/test/xa_test.go +++ b/test/xa_test.go @@ -12,18 +12,15 @@ import ( "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" + "github.com/dtm-labs/dtm/dtmutil" "github.com/dtm-labs/dtm/test/busi" "github.com/go-resty/resty/v2" "github.com/stretchr/testify/assert" ) -func getXc() *dtmcli.XaClient { - return busi.XaClient -} - func TestXaNormal(t *testing.T) { gid := dtmimp.GetFuncName() - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(dtmutil.DefaultHTTPServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { req := busi.GenTransReq(30, false, false) resp, err := xa.CallBranch(req, busi.Busi+"/TransOutXa") if err != nil { @@ -39,7 +36,7 @@ func TestXaNormal(t *testing.T) { func TestXaDuplicate(t *testing.T) { gid := dtmimp.GetFuncName() - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(DtmServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { req := busi.GenTransReq(30, false, false) _, err := xa.CallBranch(req, busi.Busi+"/TransOutXa") assert.Nil(t, err) @@ -61,7 +58,7 @@ func TestXaDuplicate(t *testing.T) { func TestXaRollback(t *testing.T) { gid := dtmimp.GetFuncName() - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(DtmServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { req := busi.GenTransReq(30, false, true) resp, err := xa.CallBranch(req, busi.Busi+"/TransOutXa") if err != nil { @@ -77,7 +74,7 @@ func TestXaRollback(t *testing.T) { func TestXaLocalError(t *testing.T) { gid := dtmimp.GetFuncName() - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(DtmServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { return nil, fmt.Errorf("an error") }) assert.Error(t, err, fmt.Errorf("an error")) @@ -87,7 +84,7 @@ func TestXaLocalError(t *testing.T) { func TestXaTimeout(t *testing.T) { gid := dtmimp.GetFuncName() timeoutChan := make(chan int, 1) - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(DtmServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { go func() { cronTransOnceForwardNow(t, gid, 300) timeoutChan <- 0 @@ -103,7 +100,7 @@ func TestXaTimeout(t *testing.T) { func TestXaNotTimeout(t *testing.T) { gid := dtmimp.GetFuncName() timeoutChan := make(chan int, 1) - err := getXc().XaGlobalTransaction(gid, func(xa *dtmcli.Xa) (*resty.Response, error) { + err := dtmcli.XaGlobalTransaction(DtmServer, gid, func(xa *dtmcli.Xa) (*resty.Response, error) { go func() { cronTransOnceForwardNow(t, gid, 0) // not timeout, timeoutChan <- 0 From 0d6e0cd8c552420cdd47f721717ac26a2a60d05d Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Thu, 24 Mar 2022 22:04:32 +0800 Subject: [PATCH 34/41] fix lint --- dtmgrpc/dtmgimp/types.go | 2 +- dtmgrpc/dtmgimp/utils.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dtmgrpc/dtmgimp/types.go b/dtmgrpc/dtmgimp/types.go index bb7fcaf..7710665 100644 --- a/dtmgrpc/dtmgimp/types.go +++ b/dtmgrpc/dtmgimp/types.go @@ -58,7 +58,7 @@ func InvokeBranch(t *dtmimp.TransBase, isRaw bool, msg proto.Message, url string } ctx := TransInfo2Ctx(t.Gid, t.TransType, branchID, op, t.Dtm) ctx = metadata.AppendToOutgoingContext(ctx, Map2Kvs(t.BranchHeaders)...) - if t.TransType == "xa" { // xa branch need addtional phase2_url + if t.TransType == "xa" { // xa branch need additional phase2_url ctx = metadata.AppendToOutgoingContext(ctx, Map2Kvs(map[string]string{dtmpre + "phase2_url": url})...) } return MustGetGrpcConn(server, isRaw).Invoke(ctx, method, msg, reply) diff --git a/dtmgrpc/dtmgimp/utils.go b/dtmgrpc/dtmgimp/utils.go index 0e46c70..b1e4b36 100644 --- a/dtmgrpc/dtmgimp/utils.go +++ b/dtmgrpc/dtmgimp/utils.go @@ -102,6 +102,7 @@ func GetMetaFromContext(ctx context.Context, name string) string { return mdGet(md, name) } +// GetDtmMetaFromContext get dtm header from context func GetDtmMetaFromContext(ctx context.Context, name string) string { md, _ := metadata.FromIncomingContext(ctx) return dtmGet(md, name) From 8cc5e95a01f05b98dc205ca725a68dd9b710f6f1 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Fri, 25 Mar 2022 10:34:26 +0800 Subject: [PATCH 35/41] add success data expire --- conf.sample.yml | 3 ++- dtmsvr/config/config.go | 5 +++-- dtmsvr/storage/redis/redis.go | 10 +++++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/conf.sample.yml b/conf.sample.yml index 673c9e9..ec3ec8b 100644 --- a/conf.sample.yml +++ b/conf.sample.yml @@ -35,7 +35,8 @@ ### flollowing config is only for some Driver # DataExpire: 604800 # Trans data will expire in 7 days. only for redis/boltdb. -# RedisPrefix: '{}' # default value is '{}'. Redis storage prefix. store data to only one slot in cluster +# SuccessDataExpire: 86400 # successful Trans data will expire in 1 days. only for redis. +# RedisPrefix: '{a}' # default value is '{a}'. Redis storage prefix. store data to only one slot in cluster # MicroService: # Driver: 'dtm-driver-gozero' # name of the driver to handle register/discover diff --git a/dtmsvr/config/config.go b/dtmsvr/config/config.go index a72bea7..f64fa32 100644 --- a/dtmsvr/config/config.go +++ b/dtmsvr/config/config.go @@ -46,8 +46,9 @@ type Store struct { MaxOpenConns int64 `yaml:"MaxOpenConns" default:"500"` MaxIdleConns int64 `yaml:"MaxIdleConns" default:"500"` ConnMaxLifeTime int64 `yaml:"ConnMaxLifeTime" default:"5"` - DataExpire int64 `yaml:"DataExpire" default:"604800"` // Trans data will expire in 7 days. only for redis/boltdb. - RedisPrefix string `yaml:"RedisPrefix" default:"{a}"` // Redis storage prefix. store data to only one slot in cluster + DataExpire int64 `yaml:"DataExpire" default:"604800"` // Trans data will expire in 7 days. only for redis/boltdb. + SuccessDataExpire int64 `yaml:"SuccessDataExpire" default:"86400"` // successful Trans data will expire in 1 days. only for redis. + RedisPrefix string `yaml:"RedisPrefix" default:"{a}"` // Redis storage prefix. store data to only one slot in cluster TransGlobalTable string `yaml:"TransGlobalTable" default:"dtm.trans_global"` TransBranchOpTable string `yaml:"TransBranchOpTable" default:"dtm.trans_branch_op"` } diff --git a/dtmsvr/storage/redis/redis.go b/dtmsvr/storage/redis/redis.go index 7e6bbfa..a894de7 100644 --- a/dtmsvr/storage/redis/redis.go +++ b/dtmsvr/storage/redis/redis.go @@ -99,8 +99,8 @@ func (s *Store) UpdateBranches(branches []storage.TransBranchStore, updates []st } type argList struct { - Keys []string - List []interface{} + Keys []string // 1 global trans, 2 branches, 3 indices, 4 status + List []interface{} // 1 redis prefix, 2 data expire } func newArgList() *argList { @@ -214,7 +214,8 @@ func (s *Store) ChangeGlobalStatus(global *storage.TransGlobalStore, newStatus s AppendRaw(old). AppendRaw(finished). AppendRaw(global.Gid). - AppendRaw(newStatus) + AppendRaw(newStatus). + AppendObject(conf.Store.SuccessDataExpire) _, err := callLua(args, `-- ChangeGlobalStatus local old = redis.call('GET', KEYS[4]) if old ~= ARGV[4] then @@ -224,6 +225,9 @@ redis.call('SET', KEYS[1], ARGV[3], 'EX', ARGV[2]) redis.call('SET', KEYS[4], ARGV[7], 'EX', ARGV[2]) if ARGV[5] == '1' then redis.call('ZREM', KEYS[3], ARGV[6]) + redis.call('EXPIRE', KEYS[1], ARGV[8]) + redis.call('EXPIRE', KEYS[2], ARGV[8]) + redis.call('EXPIRE', KEYS[4], ARGV[8]) end `) dtmimp.E2P(err) From e69faa135750a718799492154eb2bf4ccf240518 Mon Sep 17 00:00:00 2001 From: KuiLiao Date: Sun, 27 Mar 2022 17:36:58 +0800 Subject: [PATCH 36/41] add open source notes --- dtmsvr/storage/redis/redis.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dtmsvr/storage/redis/redis.go b/dtmsvr/storage/redis/redis.go index a894de7..c3015be 100644 --- a/dtmsvr/storage/redis/redis.go +++ b/dtmsvr/storage/redis/redis.go @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2022 yedf. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + */ + package redis import ( From 754d350b309ae7a04fd09cff06cbf0b9ab060787 Mon Sep 17 00:00:00 2001 From: KuiLiao Date: Tue, 29 Mar 2022 02:03:48 +0800 Subject: [PATCH 37/41] fix helper/bench --- helper/bench/Makefile | 1 + helper/bench/prepare.sh | 4 ++-- helper/bench/svr/http.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/helper/bench/Makefile b/helper/bench/Makefile index e819a4b..72c8094 100644 --- a/helper/bench/Makefile +++ b/helper/bench/Makefile @@ -1,6 +1,7 @@ # All targets. default: bench +# configure these paths according to you system bench: /usr/local/bin/go /etc/redis/redis.conf /usr/local/bin/docker-compose main.go rm -f ../conf.sample.yml go build -o bench diff --git a/helper/bench/prepare.sh b/helper/bench/prepare.sh index 2ec3ad1..bde6b63 100755 --- a/helper/bench/prepare.sh +++ b/helper/bench/prepare.sh @@ -6,5 +6,5 @@ git clone https://github.com/dtm-labs/dtm.git && cd dtm && git checkout alpha && echo 'all prepared. you shoud run following commands to test in different terminal' echo -echo 'cd dtm && go run bench/main.go redis|boltdb|db' -echo 'cd dtm && bench/run-redis|boltdb|mysql.sh' +echo 'cd dtf && go run helper/bench/main.go redis|boltdb|db' +echo 'cd dtf/helper && bench/run-redis|boltdb|mysql.sh' diff --git a/helper/bench/svr/http.go b/helper/bench/svr/http.go index 76844d6..ef5c057 100644 --- a/helper/bench/svr/http.go +++ b/helper/bench/svr/http.go @@ -96,7 +96,7 @@ func PrepareBenchDB() { func StartSvr() { app := dtmutil.GetGinApp() benchAddRoute(app) - logger.Debugf("bench listening at %d", benchPort) + logger.Infof("bench listening at %s", benchPort) go func() { _ = app.Run(fmt.Sprintf(":%s", benchPort)) }() From f7debdd4d19a78c76bcb27274454b5ec47aaca9d Mon Sep 17 00:00:00 2001 From: KuiLiao Date: Tue, 29 Mar 2022 02:13:44 +0800 Subject: [PATCH 38/41] fix mysql error --- test/busi/startup.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/busi/startup.go b/test/busi/startup.go index 3181787..08de468 100644 --- a/test/busi/startup.go +++ b/test/busi/startup.go @@ -22,6 +22,8 @@ func PopulateDB(skipDrop bool) { dtmutil.RunSQLScript(BusiConf, file, skipDrop) file = fmt.Sprintf("%s/dtmcli.barrier.%s.sql", dtmutil.GetSQLDir(), BusiConf.Driver) dtmutil.RunSQLScript(BusiConf, file, skipDrop) + file = fmt.Sprintf("%s/dtmsvr.storage.%s.sql", dtmutil.GetSQLDir(), BusiConf.Driver) + dtmutil.RunSQLScript(BusiConf, file, skipDrop) _, err := RedisGet().FlushAll(context.Background()).Result() // redis barrier need clear dtmimp.E2P(err) SetRedisBothAccount(10000, 10000) From e871c8a581a6ac15ac7f2635eb7fd14217db0a70 Mon Sep 17 00:00:00 2001 From: KuiLiao Date: Tue, 29 Mar 2022 02:03:48 +0800 Subject: [PATCH 39/41] fix helper/bench --- helper/bench/Makefile | 1 + helper/bench/prepare.sh | 4 ++-- helper/bench/svr/http.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/helper/bench/Makefile b/helper/bench/Makefile index e819a4b..72c8094 100644 --- a/helper/bench/Makefile +++ b/helper/bench/Makefile @@ -1,6 +1,7 @@ # All targets. default: bench +# configure these paths according to you system bench: /usr/local/bin/go /etc/redis/redis.conf /usr/local/bin/docker-compose main.go rm -f ../conf.sample.yml go build -o bench diff --git a/helper/bench/prepare.sh b/helper/bench/prepare.sh index 2ec3ad1..bde6b63 100755 --- a/helper/bench/prepare.sh +++ b/helper/bench/prepare.sh @@ -6,5 +6,5 @@ git clone https://github.com/dtm-labs/dtm.git && cd dtm && git checkout alpha && echo 'all prepared. you shoud run following commands to test in different terminal' echo -echo 'cd dtm && go run bench/main.go redis|boltdb|db' -echo 'cd dtm && bench/run-redis|boltdb|mysql.sh' +echo 'cd dtf && go run helper/bench/main.go redis|boltdb|db' +echo 'cd dtf/helper && bench/run-redis|boltdb|mysql.sh' diff --git a/helper/bench/svr/http.go b/helper/bench/svr/http.go index 76844d6..ef5c057 100644 --- a/helper/bench/svr/http.go +++ b/helper/bench/svr/http.go @@ -96,7 +96,7 @@ func PrepareBenchDB() { func StartSvr() { app := dtmutil.GetGinApp() benchAddRoute(app) - logger.Debugf("bench listening at %d", benchPort) + logger.Infof("bench listening at %s", benchPort) go func() { _ = app.Run(fmt.Sprintf(":%s", benchPort)) }() From 963904dcbe42d09e321df9ac37be3690d188d10d Mon Sep 17 00:00:00 2001 From: KuiLiao Date: Tue, 29 Mar 2022 02:13:44 +0800 Subject: [PATCH 40/41] fix mysql error --- test/busi/startup.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/busi/startup.go b/test/busi/startup.go index 3181787..08de468 100644 --- a/test/busi/startup.go +++ b/test/busi/startup.go @@ -22,6 +22,8 @@ func PopulateDB(skipDrop bool) { dtmutil.RunSQLScript(BusiConf, file, skipDrop) file = fmt.Sprintf("%s/dtmcli.barrier.%s.sql", dtmutil.GetSQLDir(), BusiConf.Driver) dtmutil.RunSQLScript(BusiConf, file, skipDrop) + file = fmt.Sprintf("%s/dtmsvr.storage.%s.sql", dtmutil.GetSQLDir(), BusiConf.Driver) + dtmutil.RunSQLScript(BusiConf, file, skipDrop) _, err := RedisGet().FlushAll(context.Background()).Result() // redis barrier need clear dtmimp.E2P(err) SetRedisBothAccount(10000, 10000) From 3fe9888e0a669003f19c5d3bff3c6bb5118c05ff Mon Sep 17 00:00:00 2001 From: KuiLiao Date: Tue, 29 Mar 2022 12:19:41 +0800 Subject: [PATCH 41/41] fix database not exist --- helper/bench/prepare.sh | 2 +- helper/bench/svr/http.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/helper/bench/prepare.sh b/helper/bench/prepare.sh index bde6b63..b78f0d5 100755 --- a/helper/bench/prepare.sh +++ b/helper/bench/prepare.sh @@ -7,4 +7,4 @@ git clone https://github.com/dtm-labs/dtm.git && cd dtm && git checkout alpha && echo 'all prepared. you shoud run following commands to test in different terminal' echo echo 'cd dtf && go run helper/bench/main.go redis|boltdb|db' -echo 'cd dtf/helper && bench/run-redis|boltdb|mysql.sh' +echo 'cd dtf && ./helper/bench/test-redis|boltdb|mysql.sh' diff --git a/helper/bench/svr/http.go b/helper/bench/svr/http.go index ef5c057..0c61c5a 100644 --- a/helper/bench/svr/http.go +++ b/helper/bench/svr/http.go @@ -73,7 +73,9 @@ var sqls = 1 // PrepareBenchDB prepares db data for bench func PrepareBenchDB() { db := pdbGet() - _, err := dtmimp.DBExec(db, "drop table if exists dtm_busi.user_account_log") + _, err := dtmimp.DBExec(db, "CREATE DATABASE if not exists dtm_busi") + logger.FatalIfError(err) + _, err = dtmimp.DBExec(db, "drop table if exists dtm_busi.user_account_log") logger.FatalIfError(err) _, err = dtmimp.DBExec(db, `create table if not exists dtm_busi.user_account_log ( id INT(11) AUTO_INCREMENT PRIMARY KEY,