Browse Source

Merge pull request #317 from xyctruth/main

Support rollback_reason for tcc grpc transaction
alpha
yedf2 4 years ago
committed by GitHub
parent
commit
a861c93856
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      dtmcli/dtmimp/utils.go
  2. 4
      dtmcli/tcc.go
  3. 1
      dtmgrpc/dtmgimp/utils.go
  4. 14
      dtmsvr/trans_class.go
  5. 1
      test/tcc_grpc_test.go

1
dtmcli/dtmimp/utils.go

@ -253,6 +253,7 @@ func RespAsErrorByJSONRPC(resp *resty.Response) error {
// DeferDo a common defer do used in dtmcli/dtmgrpc
func DeferDo(rerr *error, success func() error, fail func() error) {
if x := recover(); x != nil {
*rerr = AsError(x)
_ = fail()
panic(x)
} else if *rerr != nil {

4
dtmcli/tcc.go

@ -41,7 +41,9 @@ func TccGlobalTransaction2(dtm string, gid string, custom func(*Tcc), tccFunc Tc
defer dtmimp.DeferDo(&rerr, func() error {
return dtmimp.TransCallDtm(&tcc.TransBase, tcc, "submit")
}, func() error {
tcc.RollbackReason = rerr.Error()
if rerr != nil {
tcc.RollbackReason = rerr.Error()
}
return dtmimp.TransCallDtm(&tcc.TransBase, tcc, "abort")
})
_, rerr = tccFunc(tcc)

1
dtmgrpc/dtmgimp/utils.go

@ -37,6 +37,7 @@ func DtmGrpcCall(s *dtmimp.TransBase, operation string) error {
PassthroughHeaders: s.PassthroughHeaders,
BranchHeaders: s.BranchHeaders,
RequestTimeout: s.RequestTimeout,
RollbackReason: s.RollbackReason,
},
QueryPrepared: s.QueryPrepared,
CustomedData: s.CustomData,

14
dtmsvr/trans_class.go

@ -94,12 +94,13 @@ func TransFromDtmRequest(ctx context.Context, c *dtmgpb.DtmRequest) *TransGlobal
o = c.TransOptions
}
r := TransGlobal{TransGlobalStore: storage.TransGlobalStore{
Gid: c.Gid,
TransType: c.TransType,
QueryPrepared: c.QueryPrepared,
Protocol: "grpc",
BinPayloads: c.BinPayloads,
CustomData: c.CustomedData,
Gid: c.Gid,
TransType: c.TransType,
QueryPrepared: c.QueryPrepared,
Protocol: "grpc",
BinPayloads: c.BinPayloads,
CustomData: c.CustomedData,
RollbackReason: o.RollbackReason,
TransOptions: dtmcli.TransOptions{
WaitResult: o.WaitResult,
TimeoutToFail: o.TimeoutToFail,
@ -107,6 +108,7 @@ func TransFromDtmRequest(ctx context.Context, c *dtmgpb.DtmRequest) *TransGlobal
PassthroughHeaders: o.PassthroughHeaders,
BranchHeaders: o.BranchHeaders,
RequestTimeout: o.RequestTimeout,
RollbackReason: o.RollbackReason,
},
}}
if c.Steps != "" {

1
test/tcc_grpc_test.go

@ -52,6 +52,7 @@ func TestTccGrpcRollback(t *testing.T) {
cronTransOnce(t, gid)
assert.Equal(t, StatusFailed, getTransStatus(gid))
assert.Equal(t, []string{StatusSucceed, StatusPrepared, StatusSucceed, StatusPrepared}, getBranchesStatus(gid))
assert.Equal(t, "rpc error: code = Aborted desc = reason:", getTrans(gid).RollbackReason)
}
func TestTccGrpcNested(t *testing.T) {

Loading…
Cancel
Save