From 6356090bd01ddf61a15cf3ad0b2ee2ffa756444b Mon Sep 17 00:00:00 2001 From: xyctruth <398041993@qq.com> Date: Tue, 28 Jun 2022 12:08:03 +0800 Subject: [PATCH 1/2] saga submit sync get branch error --- dtmsvr/trans_process.go | 4 ++++ test/saga_grpc_test.go | 2 +- test/saga_options_test.go | 2 ++ test/saga_test.go | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dtmsvr/trans_process.go b/dtmsvr/trans_process.go index 7a8fe46..793d341 100644 --- a/dtmsvr/trans_process.go +++ b/dtmsvr/trans_process.go @@ -45,7 +45,11 @@ func (t *TransGlobal) process(branches []TransBranch) error { if err != nil { return err } + if submitting && t.Status != dtmcli.StatusSucceed { + if t.RollbackReason != "" { + return fmt.Errorf(t.RollbackReason) + } return fmt.Errorf("wait result not return success: %w", dtmcli.ErrFailure) } return nil diff --git a/test/saga_grpc_test.go b/test/saga_grpc_test.go index 9a98d06..2b85826 100644 --- a/test/saga_grpc_test.go +++ b/test/saga_grpc_test.go @@ -36,7 +36,7 @@ func TestSagaGrpcRollback(t *testing.T) { cronTransOnce(t, gid) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid)) - assert.Equal(t, "url:localhost:58081/busi.Busi/TransIn return failed: reason:Insufficient balance. FAILURE", getTrans(saga.Gid).RollbackReason) + assert.Contains(t, getTrans(saga.Gid).RollbackReason, "Insufficient balance") } func TestSagaGrpcCurrent(t *testing.T) { diff --git a/test/saga_options_test.go b/test/saga_options_test.go index 557ab1d..c113e74 100644 --- a/test/saga_options_test.go +++ b/test/saga_options_test.go @@ -98,9 +98,11 @@ func TestSagaOptionsCommittedOngoingWait(t *testing.T) { func TestSagaOptionsRollbackWait(t *testing.T) { saga := genSaga(dtmimp.GetFuncName(), false, true) + busi.MainSwitch.FailureReason.SetOnce("Insufficient balance") saga.WaitResult = true err := saga.Submit() assert.Error(t, err) + assert.Contains(t, err.Error(), "Insufficient balance") waitTransProcessed(saga.Gid) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid)) diff --git a/test/saga_test.go b/test/saga_test.go index f536a4c..c1ed49a 100644 --- a/test/saga_test.go +++ b/test/saga_test.go @@ -33,7 +33,7 @@ func TestSagaRollback(t *testing.T) { waitTransProcessed(saga.Gid) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid)) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid)) - assert.Equal(t, "url:http://localhost:8081/api/busi/TransIn return failed: {\"error\":\"reason:Insufficient balance. FAILURE\"}. FAILURE", getTrans(saga.Gid).RollbackReason) + assert.Contains(t, getTrans(saga.Gid).RollbackReason, "Insufficient balance") } func TestSagaOngoingSucceed(t *testing.T) { From e8df3b1f9888cb396506ac04b76b9c15c275bb78 Mon Sep 17 00:00:00 2001 From: xyctruth <398041993@qq.com> Date: Tue, 28 Jun 2022 13:55:49 +0800 Subject: [PATCH 2/2] saga submit sync get branch error --- dtmgrpc/type.go | 7 ++++--- dtmsvr/trans_process.go | 2 +- test/saga_grpc_test.go | 14 ++++++++++++++ test/saga_options_test.go | 1 + 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/dtmgrpc/type.go b/dtmgrpc/type.go index 14244e3..713a368 100644 --- a/dtmgrpc/type.go +++ b/dtmgrpc/type.go @@ -8,6 +8,7 @@ package dtmgrpc import ( context "context" + "errors" "fmt" "github.com/dtm-labs/dtm/dtmcli" @@ -23,9 +24,9 @@ import ( // DtmError2GrpcError translate dtm error to grpc error func DtmError2GrpcError(res interface{}) error { e, ok := res.(error) - if ok && e == dtmimp.ErrFailure { - return status.New(codes.Aborted, dtmcli.ResultFailure).Err() - } else if ok && e == dtmimp.ErrOngoing { + if ok && errors.Is(e, dtmimp.ErrFailure) { + return status.New(codes.Aborted, e.Error()).Err() + } else if ok && errors.Is(e, dtmimp.ErrOngoing) { return status.New(codes.FailedPrecondition, dtmcli.ResultOngoing).Err() } return e diff --git a/dtmsvr/trans_process.go b/dtmsvr/trans_process.go index 793d341..c2b4f2a 100644 --- a/dtmsvr/trans_process.go +++ b/dtmsvr/trans_process.go @@ -48,7 +48,7 @@ func (t *TransGlobal) process(branches []TransBranch) error { if submitting && t.Status != dtmcli.StatusSucceed { if t.RollbackReason != "" { - return fmt.Errorf(t.RollbackReason) + return fmt.Errorf("%s. %w", t.RollbackReason, dtmcli.ErrFailure) } return fmt.Errorf("wait result not return success: %w", dtmcli.ErrFailure) } diff --git a/test/saga_grpc_test.go b/test/saga_grpc_test.go index 2b85826..2128bbb 100644 --- a/test/saga_grpc_test.go +++ b/test/saga_grpc_test.go @@ -123,6 +123,20 @@ func TestSagaGrpcWithGlobalTransRequestTimeout(t *testing.T) { waitTransProcessed(gid) } +func TestSagaGrpcOptionsRollbackWait(t *testing.T) { + gid := dtmimp.GetFuncName() + saga := genSagaGrpc(gid, false, true) + busi.MainSwitch.FailureReason.SetOnce("Insufficient balance") + saga.WaitResult = true + err := saga.Submit() + assert.Error(t, err) + assert.Contains(t, err.Error(), "Insufficient balance") + waitTransProcessed(saga.Gid) + assert.Equal(t, StatusFailed, getTransStatus(saga.Gid)) + assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid)) + assert.Contains(t, getTrans(saga.Gid).RollbackReason, "Insufficient balance") +} + func TestSagaGrpcCronPassthroughHeadersYes(t *testing.T) { gidYes := dtmimp.GetFuncName() sagaYes := dtmgrpc.NewSagaGrpc(dtmutil.DefaultGrpcServer, gidYes) diff --git a/test/saga_options_test.go b/test/saga_options_test.go index c113e74..cd43ece 100644 --- a/test/saga_options_test.go +++ b/test/saga_options_test.go @@ -106,6 +106,7 @@ func TestSagaOptionsRollbackWait(t *testing.T) { waitTransProcessed(saga.Gid) assert.Equal(t, StatusFailed, getTransStatus(saga.Gid)) assert.Equal(t, []string{StatusSucceed, StatusSucceed, StatusSucceed, StatusFailed}, getBranchesStatus(saga.Gid)) + assert.Contains(t, getTrans(saga.Gid).RollbackReason, "Insufficient balance") } func TestSagaPassthroughHeadersYes(t *testing.T) {