partial grpc saga
This commit is contained in:
parent
ac03ed4bdd
commit
723831e41f
@ -26,11 +26,16 @@ func (bb *BranchBarrier) String() string {
|
|||||||
|
|
||||||
// BarrierFromQuery construct transaction info from request
|
// BarrierFromQuery construct transaction info from request
|
||||||
func BarrierFromQuery(qs url.Values) (*BranchBarrier, error) {
|
func BarrierFromQuery(qs url.Values) (*BranchBarrier, error) {
|
||||||
|
return BarrierFrom(qs.Get("trans_type"), qs.Get("gid"), qs.Get("branch_id"), qs.Get("branch_type"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BarrierFrom construct transaction info from request
|
||||||
|
func BarrierFrom(transType, gid, branchID, branchType string) (*BranchBarrier, error) {
|
||||||
ti := &BranchBarrier{
|
ti := &BranchBarrier{
|
||||||
TransType: qs.Get("trans_type"),
|
TransType: transType,
|
||||||
Gid: qs.Get("gid"),
|
Gid: gid,
|
||||||
BranchID: qs.Get("branch_id"),
|
BranchID: branchID,
|
||||||
BranchType: qs.Get("branch_type"),
|
BranchType: branchType,
|
||||||
}
|
}
|
||||||
if ti.TransType == "" || ti.Gid == "" || ti.BranchID == "" || ti.BranchType == "" {
|
if ti.TransType == "" || ti.Gid == "" || ti.BranchID == "" || ti.BranchType == "" {
|
||||||
return nil, fmt.Errorf("invlid trans info: %v", ti)
|
return nil, fmt.Errorf("invlid trans info: %v", ti)
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/yedf/dtm/common"
|
"github.com/yedf/dtm/common"
|
||||||
"github.com/yedf/dtm/dtmcli"
|
"github.com/yedf/dtm/dtmcli"
|
||||||
|
"github.com/yedf/dtm/dtmgrpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// M alias
|
// M alias
|
||||||
@ -70,9 +71,16 @@ func sdbGet() *sql.DB {
|
|||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
// MustGetTrans construct transaction info from request
|
// MustBarrierFromGin 1
|
||||||
func MustGetTrans(c *gin.Context) *dtmcli.BranchBarrier {
|
func MustBarrierFromGin(c *gin.Context) *dtmcli.BranchBarrier {
|
||||||
ti, err := dtmcli.BarrierFromQuery(c.Request.URL.Query())
|
ti, err := dtmcli.BarrierFromQuery(c.Request.URL.Query())
|
||||||
dtmcli.FatalIfError(err)
|
dtmcli.FatalIfError(err)
|
||||||
return ti
|
return ti
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MustBarrierFromGrpc 1
|
||||||
|
func MustBarrierFromGrpc(in *dtmgrpc.BusiRequest) *dtmcli.BranchBarrier {
|
||||||
|
ti, err := dtmcli.BarrierFrom(in.Info.TransType, in.Info.Gid, in.Info.BranchID, in.Info.BranchType)
|
||||||
|
dtmcli.FatalIfError(err)
|
||||||
|
return ti
|
||||||
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ var file_examples_busi_proto_rawDesc = []byte{
|
|||||||
0x15, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63,
|
0x15, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72,
|
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72,
|
||||||
0x6f, 0x74, 0x6f, 0x32, 0xa6, 0x06, 0x0a, 0x04, 0x42, 0x75, 0x73, 0x69, 0x12, 0x3b, 0x0a, 0x09,
|
0x6f, 0x74, 0x6f, 0x32, 0xb4, 0x08, 0x0a, 0x04, 0x42, 0x75, 0x73, 0x69, 0x12, 0x3b, 0x0a, 0x09,
|
||||||
0x43, 0x61, 0x6e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x2e, 0x64, 0x74, 0x6d, 0x67,
|
0x43, 0x61, 0x6e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x2e, 0x64, 0x74, 0x6d, 0x67,
|
||||||
0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||||
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||||
@ -79,10 +79,27 @@ var file_examples_busi_proto_rawDesc = []byte{
|
|||||||
0x54, 0x72, 0x61, 0x6e, 0x73, 0x49, 0x6e, 0x54, 0x63, 0x63, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,
|
0x54, 0x72, 0x61, 0x6e, 0x73, 0x49, 0x6e, 0x54, 0x63, 0x63, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,
|
||||||
0x12, 0x14, 0x2e, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x52,
|
0x12, 0x14, 0x2e, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x52,
|
||||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63,
|
||||||
0x2e, 0x42, 0x75, 0x73, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x1e, 0x5a, 0x1c,
|
0x2e, 0x42, 0x75, 0x73, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0c,
|
||||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x65, 0x64, 0x66, 0x2f,
|
0x54, 0x72, 0x61, 0x6e, 0x73, 0x49, 0x6e, 0x42, 0x53, 0x61, 0x67, 0x61, 0x12, 0x14, 0x2e, 0x64,
|
||||||
0x64, 0x74, 0x6d, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72,
|
0x74, 0x6d, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x6f, 0x74, 0x6f, 0x33,
|
0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0d,
|
||||||
|
0x54, 0x72, 0x61, 0x6e, 0x73, 0x4f, 0x75, 0x74, 0x42, 0x53, 0x61, 0x67, 0x61, 0x12, 0x14, 0x2e,
|
||||||
|
0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x52, 0x65, 0x71, 0x75,
|
||||||
|
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a,
|
||||||
|
0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x49, 0x6e, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x42, 0x53,
|
||||||
|
0x61, 0x67, 0x61, 0x12, 0x14, 0x2e, 0x64, 0x74, 0x6d, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75,
|
||||||
|
0x73, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
|
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
|
||||||
|
0x79, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x4f, 0x75, 0x74, 0x52,
|
||||||
|
0x65, 0x76, 0x65, 0x72, 0x74, 0x42, 0x53, 0x61, 0x67, 0x61, 0x12, 0x14, 0x2e, 0x64, 0x74, 0x6d,
|
||||||
|
0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
|
0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||||
|
0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x1e, 0x5a, 0x1c, 0x67, 0x69,
|
||||||
|
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x65, 0x64, 0x66, 0x2f, 0x64, 0x74,
|
||||||
|
0x6d, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_examples_busi_proto_goTypes = []interface{}{
|
var file_examples_busi_proto_goTypes = []interface{}{
|
||||||
@ -104,21 +121,29 @@ var file_examples_busi_proto_depIdxs = []int32{
|
|||||||
0, // 10: examples.Busi.TransInTcc:input_type -> dtmgrpc.BusiRequest
|
0, // 10: examples.Busi.TransInTcc:input_type -> dtmgrpc.BusiRequest
|
||||||
0, // 11: examples.Busi.TransOutTcc:input_type -> dtmgrpc.BusiRequest
|
0, // 11: examples.Busi.TransOutTcc:input_type -> dtmgrpc.BusiRequest
|
||||||
0, // 12: examples.Busi.TransInTccNested:input_type -> dtmgrpc.BusiRequest
|
0, // 12: examples.Busi.TransInTccNested:input_type -> dtmgrpc.BusiRequest
|
||||||
1, // 13: examples.Busi.CanSubmit:output_type -> google.protobuf.Empty
|
0, // 13: examples.Busi.TransInBSaga:input_type -> dtmgrpc.BusiRequest
|
||||||
1, // 14: examples.Busi.TransIn:output_type -> google.protobuf.Empty
|
0, // 14: examples.Busi.TransOutBSaga:input_type -> dtmgrpc.BusiRequest
|
||||||
1, // 15: examples.Busi.TransOut:output_type -> google.protobuf.Empty
|
0, // 15: examples.Busi.TransInRevertBSaga:input_type -> dtmgrpc.BusiRequest
|
||||||
1, // 16: examples.Busi.TransInRevert:output_type -> google.protobuf.Empty
|
0, // 16: examples.Busi.TransOutRevertBSaga:input_type -> dtmgrpc.BusiRequest
|
||||||
1, // 17: examples.Busi.TransOutRevert:output_type -> google.protobuf.Empty
|
1, // 17: examples.Busi.CanSubmit:output_type -> google.protobuf.Empty
|
||||||
1, // 18: examples.Busi.TransInConfirm:output_type -> google.protobuf.Empty
|
1, // 18: examples.Busi.TransIn:output_type -> google.protobuf.Empty
|
||||||
1, // 19: examples.Busi.TransOutConfirm:output_type -> google.protobuf.Empty
|
1, // 19: examples.Busi.TransOut:output_type -> google.protobuf.Empty
|
||||||
1, // 20: examples.Busi.XaNotify:output_type -> google.protobuf.Empty
|
1, // 20: examples.Busi.TransInRevert:output_type -> google.protobuf.Empty
|
||||||
2, // 21: examples.Busi.TransInXa:output_type -> dtmgrpc.BusiReply
|
1, // 21: examples.Busi.TransOutRevert:output_type -> google.protobuf.Empty
|
||||||
2, // 22: examples.Busi.TransOutXa:output_type -> dtmgrpc.BusiReply
|
1, // 22: examples.Busi.TransInConfirm:output_type -> google.protobuf.Empty
|
||||||
2, // 23: examples.Busi.TransInTcc:output_type -> dtmgrpc.BusiReply
|
1, // 23: examples.Busi.TransOutConfirm:output_type -> google.protobuf.Empty
|
||||||
2, // 24: examples.Busi.TransOutTcc:output_type -> dtmgrpc.BusiReply
|
1, // 24: examples.Busi.XaNotify:output_type -> google.protobuf.Empty
|
||||||
2, // 25: examples.Busi.TransInTccNested:output_type -> dtmgrpc.BusiReply
|
2, // 25: examples.Busi.TransInXa:output_type -> dtmgrpc.BusiReply
|
||||||
13, // [13:26] is the sub-list for method output_type
|
2, // 26: examples.Busi.TransOutXa:output_type -> dtmgrpc.BusiReply
|
||||||
0, // [0:13] is the sub-list for method input_type
|
2, // 27: examples.Busi.TransInTcc:output_type -> dtmgrpc.BusiReply
|
||||||
|
2, // 28: examples.Busi.TransOutTcc:output_type -> dtmgrpc.BusiReply
|
||||||
|
2, // 29: examples.Busi.TransInTccNested:output_type -> dtmgrpc.BusiReply
|
||||||
|
1, // 30: examples.Busi.TransInBSaga:output_type -> google.protobuf.Empty
|
||||||
|
1, // 31: examples.Busi.TransOutBSaga:output_type -> google.protobuf.Empty
|
||||||
|
1, // 32: examples.Busi.TransInRevertBSaga:output_type -> google.protobuf.Empty
|
||||||
|
1, // 33: examples.Busi.TransOutRevertBSaga:output_type -> google.protobuf.Empty
|
||||||
|
17, // [17:34] is the sub-list for method output_type
|
||||||
|
0, // [0:17] is the sub-list for method input_type
|
||||||
0, // [0:0] is the sub-list for extension type_name
|
0, // [0:0] is the sub-list for extension type_name
|
||||||
0, // [0:0] is the sub-list for extension extendee
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
0, // [0:0] is the sub-list for field type_name
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
|||||||
@ -22,5 +22,10 @@ service Busi {
|
|||||||
rpc TransInTcc(dtmgrpc.BusiRequest) returns (dtmgrpc.BusiReply) {}
|
rpc TransInTcc(dtmgrpc.BusiRequest) returns (dtmgrpc.BusiReply) {}
|
||||||
rpc TransOutTcc(dtmgrpc.BusiRequest) returns (dtmgrpc.BusiReply) {}
|
rpc TransOutTcc(dtmgrpc.BusiRequest) returns (dtmgrpc.BusiReply) {}
|
||||||
rpc TransInTccNested(dtmgrpc.BusiRequest) returns (dtmgrpc.BusiReply) {}
|
rpc TransInTccNested(dtmgrpc.BusiRequest) returns (dtmgrpc.BusiReply) {}
|
||||||
|
|
||||||
|
rpc TransInBSaga(dtmgrpc.BusiRequest) returns (google.protobuf.Empty) {}
|
||||||
|
rpc TransOutBSaga(dtmgrpc.BusiRequest) returns (google.protobuf.Empty) {}
|
||||||
|
rpc TransInRevertBSaga(dtmgrpc.BusiRequest) returns (google.protobuf.Empty) {}
|
||||||
|
rpc TransOutRevertBSaga(dtmgrpc.BusiRequest) returns (google.protobuf.Empty) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,10 @@ type BusiClient interface {
|
|||||||
TransInTcc(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*dtmgrpc.BusiReply, error)
|
TransInTcc(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*dtmgrpc.BusiReply, error)
|
||||||
TransOutTcc(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*dtmgrpc.BusiReply, error)
|
TransOutTcc(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*dtmgrpc.BusiReply, error)
|
||||||
TransInTccNested(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*dtmgrpc.BusiReply, error)
|
TransInTccNested(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*dtmgrpc.BusiReply, error)
|
||||||
|
TransInBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||||
|
TransOutBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||||
|
TransInRevertBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||||
|
TransOutRevertBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type busiClient struct {
|
type busiClient struct {
|
||||||
@ -160,6 +164,42 @@ func (c *busiClient) TransInTccNested(ctx context.Context, in *dtmgrpc.BusiReque
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *busiClient) TransInBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
||||||
|
out := new(emptypb.Empty)
|
||||||
|
err := c.cc.Invoke(ctx, "/examples.Busi/TransInBSaga", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *busiClient) TransOutBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
||||||
|
out := new(emptypb.Empty)
|
||||||
|
err := c.cc.Invoke(ctx, "/examples.Busi/TransOutBSaga", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *busiClient) TransInRevertBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
||||||
|
out := new(emptypb.Empty)
|
||||||
|
err := c.cc.Invoke(ctx, "/examples.Busi/TransInRevertBSaga", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *busiClient) TransOutRevertBSaga(ctx context.Context, in *dtmgrpc.BusiRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
||||||
|
out := new(emptypb.Empty)
|
||||||
|
err := c.cc.Invoke(ctx, "/examples.Busi/TransOutRevertBSaga", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// BusiServer is the server API for Busi service.
|
// BusiServer is the server API for Busi service.
|
||||||
// All implementations must embed UnimplementedBusiServer
|
// All implementations must embed UnimplementedBusiServer
|
||||||
// for forward compatibility
|
// for forward compatibility
|
||||||
@ -177,6 +217,10 @@ type BusiServer interface {
|
|||||||
TransInTcc(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error)
|
TransInTcc(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error)
|
||||||
TransOutTcc(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error)
|
TransOutTcc(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error)
|
||||||
TransInTccNested(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error)
|
TransInTccNested(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error)
|
||||||
|
TransInBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error)
|
||||||
|
TransOutBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error)
|
||||||
|
TransInRevertBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error)
|
||||||
|
TransOutRevertBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error)
|
||||||
mustEmbedUnimplementedBusiServer()
|
mustEmbedUnimplementedBusiServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,6 +267,18 @@ func (UnimplementedBusiServer) TransOutTcc(context.Context, *dtmgrpc.BusiRequest
|
|||||||
func (UnimplementedBusiServer) TransInTccNested(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error) {
|
func (UnimplementedBusiServer) TransInTccNested(context.Context, *dtmgrpc.BusiRequest) (*dtmgrpc.BusiReply, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method TransInTccNested not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method TransInTccNested not implemented")
|
||||||
}
|
}
|
||||||
|
func (UnimplementedBusiServer) TransInBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method TransInBSaga not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedBusiServer) TransOutBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method TransOutBSaga not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedBusiServer) TransInRevertBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method TransInRevertBSaga not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedBusiServer) TransOutRevertBSaga(context.Context, *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method TransOutRevertBSaga not implemented")
|
||||||
|
}
|
||||||
func (UnimplementedBusiServer) mustEmbedUnimplementedBusiServer() {}
|
func (UnimplementedBusiServer) mustEmbedUnimplementedBusiServer() {}
|
||||||
|
|
||||||
// UnsafeBusiServer may be embedded to opt out of forward compatibility for this service.
|
// UnsafeBusiServer may be embedded to opt out of forward compatibility for this service.
|
||||||
@ -470,6 +526,78 @@ func _Busi_TransInTccNested_Handler(srv interface{}, ctx context.Context, dec fu
|
|||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _Busi_TransInBSaga_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(dtmgrpc.BusiRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(BusiServer).TransInBSaga(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/examples.Busi/TransInBSaga",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(BusiServer).TransInBSaga(ctx, req.(*dtmgrpc.BusiRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Busi_TransOutBSaga_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(dtmgrpc.BusiRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(BusiServer).TransOutBSaga(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/examples.Busi/TransOutBSaga",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(BusiServer).TransOutBSaga(ctx, req.(*dtmgrpc.BusiRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Busi_TransInRevertBSaga_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(dtmgrpc.BusiRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(BusiServer).TransInRevertBSaga(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/examples.Busi/TransInRevertBSaga",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(BusiServer).TransInRevertBSaga(ctx, req.(*dtmgrpc.BusiRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Busi_TransOutRevertBSaga_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(dtmgrpc.BusiRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(BusiServer).TransOutRevertBSaga(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/examples.Busi/TransOutRevertBSaga",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(BusiServer).TransOutRevertBSaga(ctx, req.(*dtmgrpc.BusiRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
// Busi_ServiceDesc is the grpc.ServiceDesc for Busi service.
|
// Busi_ServiceDesc is the grpc.ServiceDesc for Busi service.
|
||||||
// It's only intended for direct use with grpc.RegisterService,
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
// and not to be introspected or modified (even as a copy)
|
// and not to be introspected or modified (even as a copy)
|
||||||
@ -529,6 +657,22 @@ var Busi_ServiceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "TransInTccNested",
|
MethodName: "TransInTccNested",
|
||||||
Handler: _Busi_TransInTccNested_Handler,
|
Handler: _Busi_TransInTccNested_Handler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MethodName: "TransInBSaga",
|
||||||
|
Handler: _Busi_TransInBSaga_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "TransOutBSaga",
|
||||||
|
Handler: _Busi_TransOutBSaga_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "TransInRevertBSaga",
|
||||||
|
Handler: _Busi_TransInRevertBSaga_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "TransOutRevertBSaga",
|
||||||
|
Handler: _Busi_TransOutRevertBSaga_Handler,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: "examples/busi.proto",
|
Metadata: "examples/busi.proto",
|
||||||
|
|||||||
90
examples/grpc_saga_barrier.go
Normal file
90
examples/grpc_saga_barrier.go
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
package examples
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"database/sql"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/yedf/dtm/dtmcli"
|
||||||
|
"github.com/yedf/dtm/dtmgrpc"
|
||||||
|
"google.golang.org/protobuf/types/known/emptypb"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
addSample("grpc_saga_barrier", func() string {
|
||||||
|
req := dtmcli.MustMarshal(&TransReq{Amount: 30})
|
||||||
|
gid := dtmgrpc.MustGenGid(DtmGrpcServer)
|
||||||
|
saga := dtmgrpc.NewSaga(DtmGrpcServer, gid).
|
||||||
|
Add(BusiGrpc+"/examples.Busi/TransOutBSaga", BusiGrpc+"/examples.Busi/TransOutRevertBSaga", req).
|
||||||
|
Add(BusiGrpc+"/examples.Busi/TransInBSaga", BusiGrpc+"/examples.Busi/TransOutRevertBSaga", req)
|
||||||
|
err := saga.Submit()
|
||||||
|
dtmcli.FatalIfError(err)
|
||||||
|
return saga.Gid
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func sagaGrpcBarrierAdjustBalance(sdb *sql.Tx, uid int, amount int) (interface{}, error) {
|
||||||
|
_, err := dtmcli.StxExec(sdb, "update dtm_busi.user_account set balance = balance + ? where user_id = ?", amount, uid)
|
||||||
|
return dtmcli.ResultSuccess, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *busiServer) TransInBSaga(ctx context.Context, in *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
req := TransReq{}
|
||||||
|
dtmcli.MustUnmarshal(in.BusiData, &req)
|
||||||
|
return &emptypb.Empty{}, handleGrpcBusiness(in, MainSwitch.TransInResult.Fetch(), req.TransInResult, dtmcli.GetFuncName())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *busiServer) TransOutBSaga(ctx context.Context, in *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
req := TransReq{}
|
||||||
|
dtmcli.MustUnmarshal(in.BusiData, &req)
|
||||||
|
return &emptypb.Empty{}, handleGrpcBusiness(in, MainSwitch.TransOutResult.Fetch(), req.TransOutResult, dtmcli.GetFuncName())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *busiServer) TransInRevertBSaga(ctx context.Context, in *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
req := TransReq{}
|
||||||
|
dtmcli.MustUnmarshal(in.BusiData, &req)
|
||||||
|
return &emptypb.Empty{}, handleGrpcBusiness(in, MainSwitch.TransInRevertResult.Fetch(), "", dtmcli.GetFuncName())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *busiServer) TransOutRevertBSaga(ctx context.Context, in *dtmgrpc.BusiRequest) (*emptypb.Empty, error) {
|
||||||
|
req := TransReq{}
|
||||||
|
dtmcli.MustUnmarshal(in.BusiData, &req)
|
||||||
|
return &emptypb.Empty{}, handleGrpcBusiness(in, MainSwitch.TransOutRevertResult.Fetch(), "", dtmcli.GetFuncName())
|
||||||
|
}
|
||||||
|
|
||||||
|
func sagaBarrierTransIn(c *gin.Context) (interface{}, error) {
|
||||||
|
req := reqFrom(c)
|
||||||
|
if req.TransInResult != "" {
|
||||||
|
return req.TransInResult, nil
|
||||||
|
}
|
||||||
|
barrier := MustBarrierFromGin(c)
|
||||||
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
|
return sagaBarrierAdjustBalance(sdb, 1, req.Amount)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func sagaBarrierTransInCompensate(c *gin.Context) (interface{}, error) {
|
||||||
|
barrier := MustBarrierFromGin(c)
|
||||||
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
|
return sagaBarrierAdjustBalance(sdb, 1, -reqFrom(c).Amount)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func sagaBarrierTransOut(c *gin.Context) (interface{}, error) {
|
||||||
|
req := reqFrom(c)
|
||||||
|
if req.TransInResult != "" {
|
||||||
|
return req.TransInResult, nil
|
||||||
|
}
|
||||||
|
barrier := MustBarrierFromGin(c)
|
||||||
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
|
return sagaBarrierAdjustBalance(sdb, 2, -req.Amount)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func sagaBarrierTransOutCompensate(c *gin.Context) (interface{}, error) {
|
||||||
|
barrier := MustBarrierFromGin(c)
|
||||||
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
|
return sagaBarrierAdjustBalance(sdb, 2, reqFrom(c).Amount)
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -7,11 +7,7 @@ import (
|
|||||||
func init() {
|
func init() {
|
||||||
addSample("saga", func() string {
|
addSample("saga", func() string {
|
||||||
dtmcli.Logf("a saga busi transaction begin")
|
dtmcli.Logf("a saga busi transaction begin")
|
||||||
req := &TransReq{
|
req := &TransReq{Amount: 30}
|
||||||
Amount: 30,
|
|
||||||
TransInResult: "SUCCESS",
|
|
||||||
TransOutResult: "SUCCESS",
|
|
||||||
}
|
|
||||||
saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)).
|
saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)).
|
||||||
Add(Busi+"/TransOut", Busi+"/TransOutRevert", req).
|
Add(Busi+"/TransOut", Busi+"/TransOutRevert", req).
|
||||||
Add(Busi+"/TransIn", Busi+"/TransInRevert", req)
|
Add(Busi+"/TransIn", Busi+"/TransInRevert", req)
|
||||||
@ -21,4 +17,17 @@ func init() {
|
|||||||
dtmcli.FatalIfError(err)
|
dtmcli.FatalIfError(err)
|
||||||
return saga.Gid
|
return saga.Gid
|
||||||
})
|
})
|
||||||
|
addSample("saga_wait", func() string {
|
||||||
|
dtmcli.Logf("a saga busi transaction begin")
|
||||||
|
req := &TransReq{Amount: 30}
|
||||||
|
saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)).
|
||||||
|
Add(Busi+"/TransOut", Busi+"/TransOutRevert", req).
|
||||||
|
Add(Busi+"/TransIn", Busi+"/TransInRevert", req)
|
||||||
|
saga.WaitResult = true // 设置为等待结果模式,后面的submit调用,会等待服务器处理这个事务。如果Submit正常返回,那么整个全局事务已成功完成
|
||||||
|
err := saga.Submit()
|
||||||
|
dtmcli.Logf("result gid is: %s", saga.Gid)
|
||||||
|
dtmcli.FatalIfError(err)
|
||||||
|
return saga.Gid
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,14 +39,14 @@ func sagaBarrierTransIn(c *gin.Context) (interface{}, error) {
|
|||||||
if req.TransInResult != "" {
|
if req.TransInResult != "" {
|
||||||
return req.TransInResult, nil
|
return req.TransInResult, nil
|
||||||
}
|
}
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return sagaBarrierAdjustBalance(sdb, 1, req.Amount)
|
return sagaBarrierAdjustBalance(sdb, 1, req.Amount)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func sagaBarrierTransInCompensate(c *gin.Context) (interface{}, error) {
|
func sagaBarrierTransInCompensate(c *gin.Context) (interface{}, error) {
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return sagaBarrierAdjustBalance(sdb, 1, -reqFrom(c).Amount)
|
return sagaBarrierAdjustBalance(sdb, 1, -reqFrom(c).Amount)
|
||||||
})
|
})
|
||||||
@ -57,14 +57,14 @@ func sagaBarrierTransOut(c *gin.Context) (interface{}, error) {
|
|||||||
if req.TransInResult != "" {
|
if req.TransInResult != "" {
|
||||||
return req.TransInResult, nil
|
return req.TransInResult, nil
|
||||||
}
|
}
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return sagaBarrierAdjustBalance(sdb, 2, -req.Amount)
|
return sagaBarrierAdjustBalance(sdb, 2, -req.Amount)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func sagaBarrierTransOutCompensate(c *gin.Context) (interface{}, error) {
|
func sagaBarrierTransOutCompensate(c *gin.Context) (interface{}, error) {
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return sagaBarrierAdjustBalance(sdb, 2, reqFrom(c).Amount)
|
return sagaBarrierAdjustBalance(sdb, 2, reqFrom(c).Amount)
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,24 +0,0 @@
|
|||||||
package examples
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/yedf/dtm/dtmcli"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
addSample("saga_wait", func() string {
|
|
||||||
dtmcli.Logf("a saga busi transaction begin")
|
|
||||||
req := &TransReq{
|
|
||||||
Amount: 30,
|
|
||||||
TransInResult: "SUCCESS",
|
|
||||||
TransOutResult: "SUCCESS",
|
|
||||||
}
|
|
||||||
saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)).
|
|
||||||
Add(Busi+"/TransOut", Busi+"/TransOutRevert", req).
|
|
||||||
Add(Busi+"/TransIn", Busi+"/TransInRevert", req)
|
|
||||||
saga.WaitResult = true // 设置为等待结果模式,后面的submit调用,会等待服务器处理这个事务。如果Submit正常返回,那么整个全局事务已成功完成
|
|
||||||
err := saga.Submit()
|
|
||||||
dtmcli.Logf("result gid is: %s", saga.Gid)
|
|
||||||
dtmcli.FatalIfError(err)
|
|
||||||
return saga.Gid
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@ -62,21 +62,21 @@ func tccBarrierTransInTry(c *gin.Context) (interface{}, error) {
|
|||||||
if req.TransInResult != "" {
|
if req.TransInResult != "" {
|
||||||
return req.TransInResult, nil
|
return req.TransInResult, nil
|
||||||
}
|
}
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return adjustTrading(sdb, transInUID, req.Amount)
|
return adjustTrading(sdb, transInUID, req.Amount)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func tccBarrierTransInConfirm(c *gin.Context) (interface{}, error) {
|
func tccBarrierTransInConfirm(c *gin.Context) (interface{}, error) {
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return adjustBalance(sdb, transInUID, reqFrom(c).Amount)
|
return adjustBalance(sdb, transInUID, reqFrom(c).Amount)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func tccBarrierTransInCancel(c *gin.Context) (interface{}, error) {
|
func tccBarrierTransInCancel(c *gin.Context) (interface{}, error) {
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return adjustTrading(sdb, transInUID, -reqFrom(c).Amount)
|
return adjustTrading(sdb, transInUID, -reqFrom(c).Amount)
|
||||||
})
|
})
|
||||||
@ -87,14 +87,14 @@ func tccBarrierTransOutTry(c *gin.Context) (interface{}, error) {
|
|||||||
if req.TransInResult != "" {
|
if req.TransInResult != "" {
|
||||||
return req.TransInResult, nil
|
return req.TransInResult, nil
|
||||||
}
|
}
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return adjustTrading(sdb, transOutUID, -req.Amount)
|
return adjustTrading(sdb, transOutUID, -req.Amount)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func tccBarrierTransOutConfirm(c *gin.Context) (interface{}, error) {
|
func tccBarrierTransOutConfirm(c *gin.Context) (interface{}, error) {
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return adjustBalance(sdb, transOutUID, -reqFrom(c).Amount)
|
return adjustBalance(sdb, transOutUID, -reqFrom(c).Amount)
|
||||||
})
|
})
|
||||||
@ -102,7 +102,7 @@ func tccBarrierTransOutConfirm(c *gin.Context) (interface{}, error) {
|
|||||||
|
|
||||||
// TccBarrierTransOutCancel will be use in test
|
// TccBarrierTransOutCancel will be use in test
|
||||||
func TccBarrierTransOutCancel(c *gin.Context) (interface{}, error) {
|
func TccBarrierTransOutCancel(c *gin.Context) (interface{}, error) {
|
||||||
barrier := MustGetTrans(c)
|
barrier := MustBarrierFromGin(c)
|
||||||
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
return barrier.Call(sdbGet(), func(sdb *sql.Tx) (interface{}, error) {
|
||||||
return adjustTrading(sdb, transOutUID, reqFrom(c).Amount)
|
return adjustTrading(sdb, transOutUID, reqFrom(c).Amount)
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user