From 47dc21aee1fa270f8f440200d1fd0d8d7e72cc58 Mon Sep 17 00:00:00 2001 From: duanhf2012 <6549168@qq.com> Date: Mon, 6 Mar 2023 11:47:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96rpc=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=8E=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E6=97=B6=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpc/gogopbprocessor.go | 5 ++++- rpc/server.go | 21 ++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/rpc/gogopbprocessor.go b/rpc/gogopbprocessor.go index 9df0dd5..d3c9b21 100644 --- a/rpc/gogopbprocessor.go +++ b/rpc/gogopbprocessor.go @@ -41,7 +41,10 @@ func (slf *GoGoPBProcessor) Marshal(v interface{}) ([]byte, error){ } func (slf *GoGoPBProcessor) Unmarshal(data []byte, msg interface{}) error{ - protoMsg := msg.(proto.Message) + protoMsg,ok := msg.(proto.Message) + if ok == false { + return fmt.Errorf("%+v is not of proto.Message type",msg) + } return proto.Unmarshal(data, protoMsg) } diff --git a/rpc/server.go b/rpc/server.go index a268956..52e7524 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -147,7 +147,6 @@ func (agent *RpcAgent) Run() { ReleaseRpcRequest(req) continue } else { - //will close tcpconn ReleaseRpcRequest(req) break } @@ -303,21 +302,22 @@ func (server *Server) selfNodeRpcHandlerGo(processor IRpcProcessor, client *Clie if reply != nil && Returns != reply && Returns != nil { byteReturns, err := req.rpcProcessor.Marshal(Returns) if err != nil { - log.SError("returns data cannot be marshal ", callSeq) - ReleaseRpcRequest(req) - } - - err = req.rpcProcessor.Unmarshal(byteReturns, reply) - if err != nil { - log.SError("returns data cannot be Unmarshal ", callSeq) - ReleaseRpcRequest(req) + Err = ConvertError(err) + log.SError("returns data cannot be marshal,callSeq is ", callSeq," error is ",err.Error()) + }else{ + err = req.rpcProcessor.Unmarshal(byteReturns, reply) + if err != nil { + Err = ConvertError(err) + log.SError("returns data cannot be Unmarshal,callSeq is ", callSeq," error is ",err.Error()) + } } } + ReleaseRpcRequest(req) v := client.RemovePending(callSeq) if v == nil { log.SError("rpcClient cannot find seq ",callSeq, " in pending") - ReleaseRpcRequest(req) + return } if len(Err) == 0 { @@ -326,7 +326,6 @@ func (server *Server) selfNodeRpcHandlerGo(processor IRpcProcessor, client *Clie v.Err = Err } v.done <- v - ReleaseRpcRequest(req) } }