diff --git a/dtmsvr/trans_status.go b/dtmsvr/trans_status.go index b7fda72..d7097ca 100644 --- a/dtmsvr/trans_status.go +++ b/dtmsvr/trans_status.go @@ -67,6 +67,9 @@ func (t *TransGlobal) needProcess() bool { } func (t *TransGlobal) getURLResult(url string, branchID, op string, branchPayload []byte) (string, error) { + if url == "" { // empty url is success + return dtmcli.ResultSuccess, nil + } if t.Protocol == "grpc" { dtmimp.PanicIf(strings.HasPrefix(url, "http"), fmt.Errorf("bad url for grpc: %s", url)) server, method, err := dtmdriver.GetDriver().ParseServerMethod(url) diff --git a/test/saga_grpc_test.go b/test/saga_grpc_test.go index ca06f07..d611241 100644 --- a/test/saga_grpc_test.go +++ b/test/saga_grpc_test.go @@ -75,6 +75,17 @@ func TestSagaGrpcNormalWait(t *testing.T) { waitTransProcessed(saga.Gid) } +func TestSagaGrpcEmptyUrl(t *testing.T) { + saga := dtmgrpc.NewSagaGrpc(examples.DtmGrpcServer, dtmimp.GetFuncName()) + req := examples.GenBusiReq(30, false, false) + saga.Add(examples.BusiGrpc+"/examples.Busi/TransOut", examples.BusiGrpc+"/examples.Busi/TransOutRevert", req) + saga.Add("", examples.BusiGrpc+"/examples.Busi/TransInRevert", req) + saga.Submit() + waitTransProcessed(saga.Gid) + assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid)) + assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid)) +} + func genSagaGrpc(gid string, outFailed bool, inFailed bool) *dtmgrpc.SagaGrpc { saga := dtmgrpc.NewSagaGrpc(examples.DtmGrpcServer, gid) req := examples.GenBusiReq(30, outFailed, inFailed) diff --git a/test/saga_test.go b/test/saga_test.go index 0e42b05..5fbc166 100644 --- a/test/saga_test.go +++ b/test/saga_test.go @@ -58,6 +58,17 @@ func TestSagaAbnormal(t *testing.T) { assert.Error(t, err) // a succeed trans can't accept submit } +func TestSagaEmptyUrl(t *testing.T) { + saga := dtmcli.NewSaga(examples.DtmHttpServer, dtmimp.GetFuncName()) + req := examples.GenTransReq(30, false, false) + saga.Add(examples.Busi+"/TransOut", "", &req) + saga.Add("", "", &req) + saga.Submit() + waitTransProcessed(saga.Gid) + assert.Equal(t, []string{StatusPrepared, StatusSucceed, StatusPrepared, StatusSucceed}, getBranchesStatus(saga.Gid)) + assert.Equal(t, StatusSucceed, getTransStatus(saga.Gid)) +} + func genSaga(gid string, outFailed bool, inFailed bool) *dtmcli.Saga { saga := dtmcli.NewSaga(examples.DtmHttpServer, gid) req := examples.GenTransReq(30, outFailed, inFailed)