From fa98442a7bf62a9155660ebf1751f50c3e1073db Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Tue, 17 Aug 2021 10:03:36 +0800 Subject: [PATCH] grpc connections use sync.Map --- dtmgrpc/type.go | 16 +++++++++------- examples/grpc_tcc.go | 4 +--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dtmgrpc/type.go b/dtmgrpc/type.go index b5da685..8ff2d23 100644 --- a/dtmgrpc/type.go +++ b/dtmgrpc/type.go @@ -4,6 +4,7 @@ import ( context "context" "fmt" "strings" + sync "sync" "github.com/yedf/dtm/dtmcli" grpc "google.golang.org/grpc" @@ -12,20 +13,21 @@ import ( "google.golang.org/protobuf/types/known/emptypb" ) -var clients = map[string]*grpc.ClientConn{} +var clients sync.Map // GetGrpcConn 1 func GetGrpcConn(grpcServer string) (conn *grpc.ClientConn, rerr error) { - if clients[grpcServer] == nil { + v, ok := clients.Load(grpcServer) + if !ok { dtmcli.Logf("grpc client connecting %s", grpcServer) - conn, err := grpc.Dial(grpcServer, grpc.WithInsecure(), grpc.WithUnaryInterceptor(GrpcClientLog)) - if err == nil { - clients[grpcServer] = conn + conn, rerr := grpc.Dial(grpcServer, grpc.WithInsecure(), grpc.WithUnaryInterceptor(GrpcClientLog)) + if rerr == nil { + clients.Store(grpcServer, conn) + v = conn dtmcli.Logf("grpc client inited for %s", grpcServer) } } - conn = clients[grpcServer] - return + return v.(*grpc.ClientConn), rerr } // MustGetGrpcConn 1 diff --git a/examples/grpc_tcc.go b/examples/grpc_tcc.go index adf7074..f8b61d6 100644 --- a/examples/grpc_tcc.go +++ b/examples/grpc_tcc.go @@ -11,9 +11,7 @@ func init() { gid := dtmgrpc.MustGenGid(DtmGrpcServer) err := dtmgrpc.TccGlobalTransaction(DtmGrpcServer, gid, func(tcc *dtmgrpc.TccGrpc) error { data := dtmcli.MustMarshal(&TransReq{Amount: 30}) - r, err := tcc.CallBranch(data, BusiGrpc+"/examples.Busi/TransOutTcc", BusiGrpc+"/examples.Busi/TransOutConfirm", BusiGrpc+"/examples.Busi/TransOutRevert") - dtmcli.LogRedf("callbranch return %v", r) - dtmcli.LogRedf("callbranch return data %s", string(r.BusiData)) + _, err := tcc.CallBranch(data, BusiGrpc+"/examples.Busi/TransOutTcc", BusiGrpc+"/examples.Busi/TransOutConfirm", BusiGrpc+"/examples.Busi/TransOutRevert") if err != nil { return err }