From 27ff65726a63f5241fbc6785ff441f14b2a26d8f Mon Sep 17 00:00:00 2001 From: duanhf2012 Date: Wed, 1 Apr 2020 15:21:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=AE=95=E6=9C=BA=E6=8D=95?= =?UTF-8?q?=E8=8E=B7=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- event/event.go | 16 ++++++++++++++++ network/processor/pbprocessor.go | 5 +++-- rpc/rpchandler.go | 22 ++++++++++++++++++++++ rpc/server.go | 8 -------- service/service.go | 18 ++++++++++++++++-- util/timer/timer.go | 17 +++++++---------- 6 files changed, 64 insertions(+), 22 deletions(-) diff --git a/event/event.go b/event/event.go index a270c55..729da07 100644 --- a/event/event.go +++ b/event/event.go @@ -1,7 +1,9 @@ package event import ( + "fmt" "github.com/duanhf2012/origin/log" + "runtime" "sync" ) @@ -78,3 +80,17 @@ func (slf *EventProcessor) SetEventReciver(eventProcessor IEventProcessor){ func (slf *EventProcessor) GetEventReciver() IEventProcessor{ return slf.eventReciver } + + +func (slf *EventProcessor) EventHandler(processor IEventProcessor,ev *Event) { + defer func() { + if r := recover(); r != nil { + buf := make([]byte, 40960) + l := runtime.Stack(buf, false) + err := fmt.Errorf("%v: %s", r, buf[:l]) + log.Error("core dump info:%+v\n",err) + } + }() + + processor.OnEventHandler(ev) +} \ No newline at end of file diff --git a/network/processor/pbprocessor.go b/network/processor/pbprocessor.go index c2cf3a6..1660ee4 100644 --- a/network/processor/pbprocessor.go +++ b/network/processor/pbprocessor.go @@ -24,10 +24,11 @@ func NewPBProcessor() *PBProcessor { return processor } -func (slf *PBProcessor) SetLittleEndian(littleEndian bool){ - slf.LittleEndian = littleEndian +func (p *PBProcessor) SetByteOrder(littleEndian bool) { + p.LittleEndian = littleEndian } + type PBPackInfo struct { typ uint16 msg proto.Message diff --git a/rpc/rpchandler.go b/rpc/rpchandler.go index 40c377a..7995daa 100644 --- a/rpc/rpchandler.go +++ b/rpc/rpchandler.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/duanhf2012/origin/log" "reflect" + "runtime" "strings" "unicode" "unicode/utf8" @@ -168,6 +169,15 @@ func (slf *RpcHandler) GetRpcResponeChan() chan *Call{ } func (slf *RpcHandler) HandlerRpcResponeCB(call *Call){ + defer func() { + if r := recover(); r != nil { + buf := make([]byte, LenStackBuf) + l := runtime.Stack(buf, false) + err := fmt.Errorf("%v: %s\n", r, buf[:l]) + log.Error("core dump info:%+v",err) + } + }() + if call.Err == nil { call.callback.Call([]reflect.Value{reflect.ValueOf(call.Reply),NilError}) }else{ @@ -176,8 +186,20 @@ func (slf *RpcHandler) HandlerRpcResponeCB(call *Call){ } +var LenStackBuf int = 40960 func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) { + defer func() { + if r := recover(); r != nil { + buf := make([]byte, LenStackBuf) + l := runtime.Stack(buf, false) + err := fmt.Errorf("%v: %s", r, buf[:l]) + log.Error("core dump info:%+v\n",err) + rpcErr := RpcError("call error : core dumps") + request.requestHandle(nil,&rpcErr) + } + }() + v,ok := slf.mapfunctons[request.ServiceMethod] if ok == false { err := Errorf("RpcHandler %s cannot find %s",slf.rpcHandler.GetName(),request.ServiceMethod) diff --git a/rpc/server.go b/rpc/server.go index 0a43924..a8d9f13 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -77,14 +77,6 @@ type RpcAgent struct { userData interface{} } -type RpcRequestRw struct { - // - ServiceMethod string // format: "Service.Method" - //Seq uint64 // sequence number chosen by client - InputParam []byte - - requestHandle RequestHandler -} func (agent *RpcAgent) WriteRespone(serviceMethod string,seq uint64,reply interface{},err *RpcError) { var rpcRespone RpcResponse diff --git a/service/service.go b/service/service.go index b852128..f937b26 100644 --- a/service/service.go +++ b/service/service.go @@ -1,10 +1,13 @@ package service import ( + "fmt" "github.com/duanhf2012/origin/event" + "github.com/duanhf2012/origin/log" "github.com/duanhf2012/origin/rpc" "github.com/duanhf2012/origin/util/timer" "reflect" + "runtime" "sync" "sync/atomic" ) @@ -27,7 +30,6 @@ type IService interface { } - type Service struct { Module rpc.RpcHandler //rpc @@ -38,6 +40,7 @@ type Service struct { serviceCfg interface{} gorouterNum int32 startStatus bool + } func (slf *Service) OnSetup(iservice IService){ @@ -82,6 +85,7 @@ func (slf *Service) Start() { } func (slf *Service) Run() { + defer slf.wg.Done() var bStop = false for{ @@ -96,7 +100,7 @@ func (slf *Service) Run() { case rpcResponeCB := <- rpcResponeCallBack: slf.GetRpcHandler().HandlerRpcResponeCB(rpcResponeCB) case ev := <- eventChan: - slf.this.(event.IEventProcessor).OnEventHandler(ev) + slf.EventHandler(slf.this.(event.IEventProcessor),ev) case t := <- slf.dispatcher.ChanTimer: t.Cb() } @@ -118,6 +122,16 @@ func (slf *Service) GetName() string{ func (slf *Service) OnRelease(){ + defer func() { + if r := recover(); r != nil { + buf := make([]byte, 40960) + l := runtime.Stack(buf, false) + err := fmt.Errorf("%v: %s", r, buf[:l]) + log.Error("core dump info:%+v\n",err) + } + }() + + slf.this.OnRelease() } func (slf *Service) OnInit() error { diff --git a/util/timer/timer.go b/util/timer/timer.go index 48ea8c8..435babc 100644 --- a/util/timer/timer.go +++ b/util/timer/timer.go @@ -1,6 +1,9 @@ package timer import ( + "fmt" + "github.com/duanhf2012/origin/log" + "runtime" "time" ) @@ -28,20 +31,14 @@ func (t *Timer) Stop() { } func (t *Timer) Cb() { - /* defer func() { - t.cb = nil if r := recover(); r != nil { - if conf.LenStackBuf > 0 { - buf := make([]byte, conf.LenStackBuf) - l := runtime.Stack(buf, false) - log.Error("%v: %s", r, buf[:l]) - } else { - log.Error("%v", r) - } + buf := make([]byte, 40960) + l := runtime.Stack(buf, false) + err := fmt.Errorf("%v: %s", r, buf[:l]) + log.Error("core dump info:%+v\n",err) } }() - */ if t.cbex!=nil { t.cbex(t)