From 50808698899e5c0bb7fe7412410a607690029fde Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Wed, 9 Feb 2022 07:27:11 +0800 Subject: [PATCH] test busi updated --- README-cn.md | 8 ++++---- README-en.md | 8 ++++---- README.md | 8 ++++---- bench/svr/http.go | 8 ++++---- test/busi/barrier.go | 28 ++++++++++++++++++++++++++-- test/busi/quick_start.go | 16 ++++++++-------- test/saga_barrier_test.go | 17 +++++++++++++++-- 7 files changed, 65 insertions(+), 28 deletions(-) diff --git a/README-cn.md b/README-cn.md index ff66096..15b2500 100644 --- a/README-cn.md +++ b/README-cn.md @@ -100,10 +100,10 @@ go run main.go // DtmServer为DTM服务的地址,是一个url DtmServer := "http://localhost:36789/api/dtmsvr" saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). - // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCompensate" - Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). - // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransIn", 补偿操作为url: qsBusi+"/TransInCompensate" - Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) + // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCom" + Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req). + // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransIn", 补偿操作为url: qsBusi+"/TransInCom" + Add(qsBusi+"/TransIn", qsBusi+"/TransInCom", req) // 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务 err := saga.Submit() ``` diff --git a/README-en.md b/README-en.md index a83160f..9445104 100644 --- a/README-en.md +++ b/README-en.md @@ -93,10 +93,10 @@ If your language stack is Java, you can also choose to access dtm and use sub-tr req := &gin.H{"amount": 30} // micro-service payload // DtmServer is the address of DTM micro-service saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). - // add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCompensate" - Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). - // add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCompensate" - Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) + // add a TransOut subtraction,forward operation with url: qsBusi+"/TransOut", reverse compensation operation with url: qsBusi+"/TransOutCom" + Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req). + // add a TransIn subtraction, forward operation with url: qsBusi+"/TransIn", reverse compensation operation with url: qsBusi+"/TransInCom" + Add(qsBusi+"/TransIn", qsBusi+"/TransInCom", req) // submit the created saga transaction,dtm ensures all subtractions either complete or get revoked err := saga.Submit() ``` diff --git a/README.md b/README.md index ff66096..15b2500 100644 --- a/README.md +++ b/README.md @@ -100,10 +100,10 @@ go run main.go // DtmServer为DTM服务的地址,是一个url DtmServer := "http://localhost:36789/api/dtmsvr" saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). - // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCompensate" - Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). - // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransIn", 补偿操作为url: qsBusi+"/TransInCompensate" - Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) + // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCom" + Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req). + // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransIn", 补偿操作为url: qsBusi+"/TransInCom" + Add(qsBusi+"/TransIn", qsBusi+"/TransInCom", req) // 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务 err := saga.Submit() ``` diff --git a/bench/svr/http.go b/bench/svr/http.go index 1f827d8..76844d6 100644 --- a/bench/svr/http.go +++ b/bench/svr/http.go @@ -139,13 +139,13 @@ func benchAddRoute(app *gin.Engine) { app.POST(benchAPI+"/TransIn", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { return qsAdjustBalance(dtmimp.MustAtoi(c.Query("uid")), 1, c) })) - app.POST(benchAPI+"/TransInCompensate", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { + app.POST(benchAPI+"/TransInCom", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { return qsAdjustBalance(dtmimp.MustAtoi(c.Query("uid")), -1, c) })) app.POST(benchAPI+"/TransOut", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { return qsAdjustBalance(dtmimp.MustAtoi(c.Query("uid")), -1, c) })) - app.POST(benchAPI+"/TransOutCompensate", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { + app.POST(benchAPI+"/TransOutCom", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { return qsAdjustBalance(dtmimp.MustAtoi(c.Query("uid")), 30, c) })) app.Any(benchAPI+"/reloadData", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { @@ -167,8 +167,8 @@ func benchAddRoute(app *gin.Engine) { logger.Debugf("mode: %s contains dtm: %t", mode, strings.Contains(mode, "dtm")) if strings.Contains(mode, "dtm") { saga := dtmcli.NewSaga(dtmutil.DefaultHTTPServer, fmt.Sprintf("bench-%d", uid)). - Add(benchBusi+"/TransOut"+params, benchBusi+"/TransOutCompensate"+params, req). - Add(benchBusi+"/TransIn"+params2, benchBusi+"/TransInCompensate"+params2, req) + Add(benchBusi+"/TransOut"+params, benchBusi+"/TransOutCom"+params, req). + Add(benchBusi+"/TransIn"+params2, benchBusi+"/TransInCom"+params2, req) saga.WaitResult = true err := saga.Submit() dtmimp.E2P(err) diff --git a/test/busi/barrier.go b/test/busi/barrier.go index d0c29ad..d3793d0 100644 --- a/test/busi/barrier.go +++ b/test/busi/barrier.go @@ -26,19 +26,43 @@ func init() { return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount, reqFrom(c).TransInResult) }) })) - app.POST(BusiAPI+"/SagaBTransInCompensate", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { + app.POST(BusiAPI+"/SagaBTransInCom", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { barrier := MustBarrierFromGin(c) return barrier.Call(txGet(), func(tx *sql.Tx) error { return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount, "") }) })) + app.POST(BusiAPI+"/SagaB2TransIn", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { + barrier := MustBarrierFromGin(c) + err := barrier.Call(txGet(), func(tx *sql.Tx) error { + return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount/2, reqFrom(c).TransInResult) + }) + if err != nil { + return err + } + return barrier.Call(txGet(), func(tx *sql.Tx) error { + return SagaAdjustBalance(tx, TransInUID, reqFrom(c).Amount/2, reqFrom(c).TransInResult) + }) + })) + app.POST(BusiAPI+"/SagaB2TransInCom", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { + barrier := MustBarrierFromGin(c) + err := barrier.Call(txGet(), func(tx *sql.Tx) error { + return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount/2, "") + }) + if err != nil { + return err + } + return barrier.Call(txGet(), func(tx *sql.Tx) error { + return SagaAdjustBalance(tx, TransInUID, -reqFrom(c).Amount, "") + }) + })) app.POST(BusiAPI+"/SagaBTransOut", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { barrier := MustBarrierFromGin(c) return barrier.Call(txGet(), func(tx *sql.Tx) error { return SagaAdjustBalance(tx, TransOutUID, -reqFrom(c).Amount, reqFrom(c).TransOutResult) }) })) - app.POST(BusiAPI+"/SagaBTransOutCompensate", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { + app.POST(BusiAPI+"/SagaBTransOutCom", dtmutil.WrapHandler2(func(c *gin.Context) interface{} { barrier := MustBarrierFromGin(c) return barrier.Call(txGet(), func(tx *sql.Tx) error { return SagaAdjustBalance(tx, TransOutUID, reqFrom(c).Amount, "") diff --git a/test/busi/quick_start.go b/test/busi/quick_start.go index 4fbfb5d..e2ae867 100644 --- a/test/busi/quick_start.go +++ b/test/busi/quick_start.go @@ -47,10 +47,10 @@ func QsFireRequest() string { req := &gin.H{"amount": 30} // 微服务的载荷 // DtmServer为DTM服务的地址 saga := dtmcli.NewSaga(dtmServer, dtmcli.MustGenGid(dtmServer)). - // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 逆向操作为url: qsBusi+"/TransOutCompensate" - Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). - // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransOut", 逆向操作为url: qsBusi+"/TransInCompensate" - Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) + // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 逆向操作为url: qsBusi+"/TransOutCom" + Add(qsBusi+"/TransOut", qsBusi+"/TransOutCom", req). + // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransOut", 逆向操作为url: qsBusi+"/TransInCom" + Add(qsBusi+"/TransIn", qsBusi+"/TransInCom", req) // 等待事务全部完成后再返回,可选 saga.WaitResult = true // 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务 @@ -65,16 +65,16 @@ func qsAddRoute(app *gin.Engine) { c.JSON(200, "") // c.JSON(409, "") // Status 409 for Failure. Won't be retried }) - app.POST(qsBusiAPI+"/TransInCompensate", func(c *gin.Context) { - logger.Infof("TransInCompensate") + app.POST(qsBusiAPI+"/TransInCom", func(c *gin.Context) { + logger.Infof("TransInCom") c.JSON(200, "") }) app.POST(qsBusiAPI+"/TransOut", func(c *gin.Context) { logger.Infof("TransOut") c.JSON(200, "") }) - app.POST(qsBusiAPI+"/TransOutCompensate", func(c *gin.Context) { - logger.Infof("TransOutCompensate") + app.POST(qsBusiAPI+"/TransOutCom", func(c *gin.Context) { + logger.Infof("TransOutCom") c.JSON(200, "") }) } diff --git a/test/saga_barrier_test.go b/test/saga_barrier_test.go index ecb2194..45c9057 100644 --- a/test/saga_barrier_test.go +++ b/test/saga_barrier_test.go @@ -36,6 +36,19 @@ func TestSagaBarrierRollback(t *testing.T) { func genSagaBarrier(gid string, outFailed, inFailed bool) *dtmcli.Saga { req := busi.GenTransReq(30, outFailed, inFailed) return dtmcli.NewSaga(DtmServer, gid). - Add(Busi+"/SagaBTransOut", Busi+"/SagaBTransOutCompensate", req). - Add(Busi+"/SagaBTransIn", Busi+"/SagaBTransInCompensate", req) + Add(Busi+"/SagaBTransOut", Busi+"/SagaBTransOutCom", req). + Add(Busi+"/SagaBTransIn", Busi+"/SagaBTransInCom", req) +} + +func TestSagaBarrier2Normal(t *testing.T) { + req := busi.GenTransReq(30, false, false) + gid := dtmimp.GetFuncName() + saga := dtmcli.NewSaga(DtmServer, gid). + Add(Busi+"/SagaBTransOut", Busi+"/SagaBTransOutCom", req). + Add(Busi+"/SagaB2TransIn", Busi+"/SagaB2TransInCom", req) + err := saga.Submit() + assert.Nil(t, err) + waitTransProcessed(saga.Gid) + assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid)) + assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid)) }