From ee6c5b7ca5d636ea9f116f74bc26ce09fad47154 Mon Sep 17 00:00:00 2001 From: lixiaoshuang <644968328@qq.com> Date: Sun, 12 Dec 2021 17:24:38 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9beanch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main.go | 3 --- bench/http.go | 2 +- bench/main.go | 29 +++++++++++++++++++++++++++++ conf.sample.yml | 2 +- 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 bench/main.go diff --git a/app/main.go b/app/main.go index aaa89ed..0e344b0 100644 --- a/app/main.go +++ b/app/main.go @@ -11,7 +11,6 @@ import ( "os" "strings" - "github.com/yedf/dtm/bench" "github.com/yedf/dtm/common" "github.com/yedf/dtm/dtmcli" "github.com/yedf/dtm/dtmcli/dtmimp" @@ -66,8 +65,6 @@ func main() { // quick_start 比较独立,单独作为一个例子运行,方便新人上手 examples.QsStartSvr() examples.QsFireRequest() - case "bench": - bench.StartSvr() case "dev", "dtmsvr": default: // 下面是各类的例子 diff --git a/bench/http.go b/bench/http.go index 1d1bd4a..4308658 100644 --- a/bench/http.go +++ b/bench/http.go @@ -4,7 +4,7 @@ * license that can be found in the LICENSE file. */ -package bench +package main import ( "database/sql" diff --git a/bench/main.go b/bench/main.go new file mode 100644 index 0000000..6a2434a --- /dev/null +++ b/bench/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "fmt" + "github.com/yedf/dtm/common" + "github.com/yedf/dtm/dtmcli" + "github.com/yedf/dtm/dtmcli/dtmimp" + "github.com/yedf/dtm/dtmsvr" + "github.com/yedf/dtm/examples" + "os" +) + +func main() { + if len(os.Args) > 1 { + dtmimp.Logf("starting dtm....") + if os.Args[1] == "http" { + fmt.Println("start bench server") + common.MustLoadConfig() + dtmcli.SetCurrentDBType(common.DtmConfig.DB["driver"]) + common.WaitDBUp() + dtmsvr.PopulateDB(true) + examples.PopulateDB(true) + dtmsvr.StartSvr() // 启动dtmsvr的api服务 + go dtmsvr.CronExpiredTrans(-1) // 启动dtmsvr的定时过期查询 + StartSvr() + select {} + } + } +} diff --git a/conf.sample.yml b/conf.sample.yml index 4701009..b4d6217 100644 --- a/conf.sample.yml +++ b/conf.sample.yml @@ -2,7 +2,7 @@ DB: driver: 'mysql' host: 'localhost' user: 'root' - password: '' + password: '12345678' port: '3306' # driver: 'postgres' From c3a97bedd769624bd37326fbc5db4e9210990290 Mon Sep 17 00:00:00 2001 From: lixiaoshuang <644968328@qq.com> Date: Sun, 12 Dec 2021 17:25:30 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9beanch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf.sample.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf.sample.yml b/conf.sample.yml index b4d6217..4701009 100644 --- a/conf.sample.yml +++ b/conf.sample.yml @@ -2,7 +2,7 @@ DB: driver: 'mysql' host: 'localhost' user: 'root' - password: '12345678' + password: '' port: '3306' # driver: 'postgres' From a59b7e1f0233f1db4d6b05f09d9efdb54a19f1da Mon Sep 17 00:00:00 2001 From: lixiaoshuang <644968328@qq.com> Date: Sun, 12 Dec 2021 17:45:43 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bench/main.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bench/main.go b/bench/main.go index 6a2434a..86fab07 100644 --- a/bench/main.go +++ b/bench/main.go @@ -10,6 +10,12 @@ import ( "os" ) +var hint = `To start the bench server, you need to specify the parameters: + +Available commands: + http start bench server +` + func main() { if len(os.Args) > 1 { dtmimp.Logf("starting dtm....") @@ -24,6 +30,10 @@ func main() { go dtmsvr.CronExpiredTrans(-1) // 启动dtmsvr的定时过期查询 StartSvr() select {} + }else { + fmt.Printf(hint) } + }else { + fmt.Printf(hint) } } From d7f65dc4702f254f8cb747be8b318864dcf1f557 Mon Sep 17 00:00:00 2001 From: lixiaoshuang <644968328@qq.com> Date: Sun, 12 Dec 2021 18:32:30 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bench/main.go | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/bench/main.go b/bench/main.go index 86fab07..f5bfefd 100644 --- a/bench/main.go +++ b/bench/main.go @@ -17,23 +17,23 @@ Available commands: ` func main() { - if len(os.Args) > 1 { - dtmimp.Logf("starting dtm....") - if os.Args[1] == "http" { - fmt.Println("start bench server") - common.MustLoadConfig() - dtmcli.SetCurrentDBType(common.DtmConfig.DB["driver"]) - common.WaitDBUp() - dtmsvr.PopulateDB(true) - examples.PopulateDB(true) - dtmsvr.StartSvr() // 启动dtmsvr的api服务 - go dtmsvr.CronExpiredTrans(-1) // 启动dtmsvr的定时过期查询 - StartSvr() - select {} - }else { - fmt.Printf(hint) - } - }else { + if len(os.Args) <= 1 { + fmt.Printf(hint) + return + } + dtmimp.Logf("starting dtm....") + if os.Args[1] == "http" { + fmt.Println("start bench server") + common.MustLoadConfig() + dtmcli.SetCurrentDBType(common.DtmConfig.DB["driver"]) + common.WaitDBUp() + dtmsvr.PopulateDB(true) + examples.PopulateDB(true) + dtmsvr.StartSvr() // 启动dtmsvr的api服务 + go dtmsvr.CronExpiredTrans(-1) // 启动dtmsvr的定时过期查询 + StartSvr() + select {} + } else { fmt.Printf(hint) } } From c4ec33d1d2463954a9e40ffc89ffa66257131d0c Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 13 Dec 2021 09:22:30 +0800 Subject: [PATCH 05/12] add mp --- README-cn.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README-cn.md b/README-cn.md index 517dd9a..e29a3e9 100644 --- a/README-cn.md +++ b/README-cn.md @@ -119,6 +119,8 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 ### 完整示例 参考[examples/quick_start.go](./examples/quick_start.go) +## 公众号 +您可以关注公众号:分布式事务,及时跟踪dtm的最新内容 ## 交流群 请加 yedf2008 好友或者扫码加好友,验证回复 dtm 按照指引进群 From 0a18dd130517f278086a27da614af1ecbb214f21 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 13 Dec 2021 09:28:07 +0800 Subject: [PATCH 06/12] cn to README --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 94bf4ca..e29a3e9 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,9 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 ## 与其他框架对比 -目前开源的分布式事务框架,暂未看到非Java语言有成熟的框架。而Java语言的较多,有阿里的SEATA、华为的ServiceComb-Pack,京东的shardingsphere,以及himly,tcc-transaction,ByteTCC等等,其中以seata应用最为广泛。 +目前开源的分布式事务框架,Java的框架较多,有大厂开源的SEATA、ServiceComb-Pack,shardingsphere,以及个人开源的himly,tcc-transaction,ByteTCC等等,其中以Seata的应用最为广泛。 -下面是dtm和seata的主要特性对比: +非Java语言类的,暂未看到除dtm之外的成熟框架,因此这里仅将DTM和Java中最成熟的Seata对比: | 特性| DTM | SEATA |备注| |:-----:|:----:|:----:|:----:| @@ -119,6 +119,8 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 ### 完整示例 参考[examples/quick_start.go](./examples/quick_start.go) +## 公众号 +您可以关注公众号:分布式事务,及时跟踪dtm的最新内容 ## 交流群 请加 yedf2008 好友或者扫码加好友,验证回复 dtm 按照指引进群 From cc05c66373a80e251904b9977e2d045572561129 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 13 Dec 2021 09:30:19 +0800 Subject: [PATCH 07/12] update readme --- README-cn.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-cn.md b/README-cn.md index e29a3e9..f30da2f 100644 --- a/README-cn.md +++ b/README-cn.md @@ -126,7 +126,7 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 ![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) -如果您觉得[dtm](https://github.com/yedf/dtm)不错,或者对您有帮助,请赏颗星吧! +欢迎使用dtm,或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们 ## 谁在使用
diff --git a/README.md b/README.md index e29a3e9..f30da2f 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 ![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) -如果您觉得[dtm](https://github.com/yedf/dtm)不错,或者对您有帮助,请赏颗星吧! +欢迎使用dtm,或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们 ## 谁在使用
From d266c118bf1da34dfa0463380cd32aaa1ba050d1 Mon Sep 17 00:00:00 2001 From: jxlwqq Date: Mon, 13 Dec 2021 15:26:34 +0800 Subject: [PATCH 08/12] ci: support multi-platform docker image build --- .github/workflows/release.yml | 46 ++++++++++++++++++++++++++--------- helper/.goreleaser.yml | 1 + helper/Dockerfile-release | 9 ++++--- helper/build-repo.sh | 8 ------ 4 files changed, 41 insertions(+), 23 deletions(-) delete mode 100755 helper/build-repo.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 82b5c54..d65f219 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: Release on: create: tags: - - v* + - 'v*.*.*' jobs: release: @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v1 + uses: actions/checkout@v2 - name: Validates GO releaser config uses: docker://goreleaser/goreleaser:latest @@ -24,14 +24,36 @@ jobs: env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - name: Get the tag name - run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + images: | + yedf/dtm + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha - - name: Publish docker - env: - host: 'ubuntu@en.dtm.pub' - dest: '/home/ubuntu' - run: | - echo "${{secrets.DEPLOY_KEY}}" > deploy_key - chmod 600 ./deploy_key - ssh -i deploy_key -o StrictHostKeyChecking=no ${{env.host}} 'cd ${{env.dest}}/dtm && git pull && sudo sh helper/build-repo.sh ${{env.TAG}}' + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: ./helper/Dockerfile-release + push: true + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/helper/.goreleaser.yml b/helper/.goreleaser.yml index 39ca3ad..1ce6b3f 100644 --- a/helper/.goreleaser.yml +++ b/helper/.goreleaser.yml @@ -7,6 +7,7 @@ builds: - windows - darwin goarch: + - arm64 - amd64 id: 'dtm' dir: . diff --git a/helper/Dockerfile-release b/helper/Dockerfile-release index db911a7..b922185 100644 --- a/helper/Dockerfile-release +++ b/helper/Dockerfile-release @@ -1,11 +1,14 @@ -FROM golang:1.16.6-alpine3.14 as builder +# syntax=docker/dockerfile:1 +FROM --platform=$TARGETPLATFORM golang:1.16.6-alpine3.14 as builder +ARG TARGETARCH +ARG TARGETOS WORKDIR /app/dtm # RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct EXPOSE 8080 COPY . . -RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" app/main.go && apk add upx && upx main +RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -ldflags="-s -w" app/main.go -FROM alpine:3.14 as runner +FROM --platform=$TARGETPLATFORM alpine:3.14 COPY --from=builder /app/dtm/main /app/dtm/ ENV IS_DOCKER=1 WORKDIR /app/dtm diff --git a/helper/build-repo.sh b/helper/build-repo.sh deleted file mode 100755 index 9182cb5..0000000 --- a/helper/build-repo.sh +++ /dev/null @@ -1,8 +0,0 @@ -set -x -if [ x$1 == x ]; then - echo please specify version - exit 1 -fi - -docker build -f helper/Dockerfile-release -t yedf/dtm:latest . && docker push yedf/dtm:latest -docker tag yedf/dtm:latest yedf/dtm:$1 && docker push yedf/dtm:$1 \ No newline at end of file From 5aabd247ad0130139fa1ccd8c60f57a9b8cf390f Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Mon, 13 Dec 2021 09:33:01 +0800 Subject: [PATCH 09/12] update readme --- README-cn.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-cn.md b/README-cn.md index f30da2f..241d125 100644 --- a/README-cn.md +++ b/README-cn.md @@ -126,7 +126,7 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 ![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) -欢迎使用dtm,或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们 +欢迎使用[dtm](https://github.com/yedf/dtm),或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们 ## 谁在使用
diff --git a/README.md b/README.md index f30da2f..241d125 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 ![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) -欢迎使用dtm,或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们 +欢迎使用[dtm](https://github.com/yedf/dtm),或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们 ## 谁在使用
From 164a73d6aa48647a68d04648190bdabdab493ba5 Mon Sep 17 00:00:00 2001 From: jxlwqq Date: Mon, 13 Dec 2021 17:07:27 +0800 Subject: [PATCH 10/12] remove arm64 goarch --- helper/.goreleaser.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/helper/.goreleaser.yml b/helper/.goreleaser.yml index 1ce6b3f..39ca3ad 100644 --- a/helper/.goreleaser.yml +++ b/helper/.goreleaser.yml @@ -7,7 +7,6 @@ builds: - windows - darwin goarch: - - arm64 - amd64 id: 'dtm' dir: . From 624629efc87d09df8bbfa898f7358c86e0029850 Mon Sep 17 00:00:00 2001 From: wuqinqiang <1185079673@qq.com> Date: Tue, 14 Dec 2021 15:30:33 +0800 Subject: [PATCH 11/12] 1.fix LogRedf --- common/db.go | 5 ++--- dtmcli/dtmimp/utils.go | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/common/db.go b/common/db.go index 7592458..09071c5 100644 --- a/common/db.go +++ b/common/db.go @@ -144,8 +144,7 @@ func WaitDBUp() { defer func() { sdb.Close() }() - for _, err := dtmimp.DBExec(sdb, "select 1"); err != nil; { // wait for mysql to start - time.Sleep(3 * time.Second) - _, err = dtmimp.DBExec(sdb, "select 1") + if _, err = dtmimp.DBExec(sdb, "select 1"); err != nil { + dtmimp.FatalIfError(err) } } diff --git a/dtmcli/dtmimp/utils.go b/dtmcli/dtmimp/utils.go index f2d77dd..df6574c 100644 --- a/dtmcli/dtmimp/utils.go +++ b/dtmcli/dtmimp/utils.go @@ -146,7 +146,7 @@ func Logf(fmt string, args ...interface{}) { // LogRedf 采用红色打印错误类信息 func LogRedf(fmt string, args ...interface{}) { - logger.Errorf(fmt, args) + logger.Errorf(fmt, args...) } // FatalExitFunc Fatal退出函数,测试时被替换 From 2f4807a6b22f3fe85b3476ac31b06328a546b97c Mon Sep 17 00:00:00 2001 From: wuqinqiang <1185079673@qq.com> Date: Tue, 14 Dec 2021 16:33:18 +0800 Subject: [PATCH 12/12] waitDBUp back --- common/db.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/db.go b/common/db.go index 09071c5..bf6c02e 100644 --- a/common/db.go +++ b/common/db.go @@ -144,7 +144,8 @@ func WaitDBUp() { defer func() { sdb.Close() }() - if _, err = dtmimp.DBExec(sdb, "select 1"); err != nil { - dtmimp.FatalIfError(err) + for _, err = dtmimp.DBExec(sdb, "select 1"); err != nil; { // wait for mysql to start + time.Sleep(3 * time.Second) + _, err = dtmimp.DBExec(sdb, "select 1") } }