异常宕机捕获处理

This commit is contained in:
duanhf2012
2020-04-01 15:21:49 +08:00
parent a76527c7d7
commit 27ff65726a
6 changed files with 64 additions and 22 deletions

View File

@@ -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)

View File

@@ -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