diff --git a/dtmcli/xa.go b/dtmcli/xa.go index 1625bc7..900627e 100644 --- a/dtmcli/xa.go +++ b/dtmcli/xa.go @@ -13,7 +13,7 @@ type M = map[string]interface{} var e2p = common.E2P -type XaGlobalFunc func() error +type XaGlobalFunc func(gid string) error type XaLocalFunc func(db *common.DB) error @@ -75,7 +75,8 @@ func (xa *Xa) XaLocalTransaction(gid string, transFunc XaLocalFunc) (rerr error) return nil } -func (xa *Xa) XaGlobalTransaction(gid string, transFunc XaGlobalFunc) (rerr error) { +func (xa *Xa) XaGlobalTransaction(transFunc XaGlobalFunc) (gid string, rerr error) { + gid = common.GenGid() data := &M{ "gid": gid, "trans_type": "xa", @@ -87,17 +88,17 @@ func (xa *Xa) XaGlobalTransaction(gid string, transFunc XaGlobalFunc) (rerr erro rerr = x.(error) } }() - resp, err := common.RestyClient.R().SetBody(data).Post(xa.Server + "/prepare") - e2p(err) + resp, rerr := common.RestyClient.R().SetBody(data).Post(xa.Server + "/prepare") + e2p(rerr) if !strings.Contains(resp.String(), "SUCCESS") { panic(fmt.Errorf("unexpected result: %s", resp.String())) } - err = transFunc() - e2p(err) - resp, err = common.RestyClient.R().SetBody(data).Post(xa.Server + "/submit") - e2p(err) + rerr = transFunc(gid) + e2p(rerr) + resp, rerr = common.RestyClient.R().SetBody(data).Post(xa.Server + "/submit") + e2p(rerr) if !strings.Contains(resp.String(), "SUCCESS") { panic(fmt.Errorf("unexpected result: %s", resp.String())) } - return nil + return } diff --git a/dtmsvr/dtmsvr_test.go b/dtmsvr/dtmsvr_test.go index 98f1e84..1d82572 100644 --- a/dtmsvr/dtmsvr_test.go +++ b/dtmsvr/dtmsvr_test.go @@ -87,8 +87,7 @@ func getBranchesStatus(gid string) []string { func xaNormal(t *testing.T) { xa := examples.XaClient - gid := "xa-normal" - err := xa.XaGlobalTransaction(gid, func() error { + gid, err := xa.XaGlobalTransaction(func(gid string) error { req := examples.GenTransReq(30, false, false) resp, err := common.RestyClient.R().SetBody(req).SetQueryParams(map[string]string{ "gid": gid, @@ -109,8 +108,7 @@ func xaNormal(t *testing.T) { func xaRollback(t *testing.T) { xa := examples.XaClient - gid := "xa-rollback" - err := xa.XaGlobalTransaction(gid, func() error { + gid, err := xa.XaGlobalTransaction(func(gid string) error { req := examples.GenTransReq(30, false, true) resp, err := common.RestyClient.R().SetBody(req).SetQueryParams(map[string]string{ "gid": gid, diff --git a/examples/main_xa.go b/examples/main_xa.go index ffa3184..fc3e9e8 100644 --- a/examples/main_xa.go +++ b/examples/main_xa.go @@ -34,8 +34,7 @@ func XaMain() { } func XaFireRequest() { - gid := common.GenGid() - err := XaClient.XaGlobalTransaction(gid, func() (rerr error) { + _, err := XaClient.XaGlobalTransaction(func(gid string) (rerr error) { defer common.P2E(&rerr) req := GenTransReq(30, false, false) resp, err := common.RestyClient.R().SetBody(req).SetQueryParams(map[string]string{