add recovery in case of panics

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
2019-12-03 01:36:14 +03:00
parent 90f9b0d0c9
commit b8e96f45d4
2 changed files with 30 additions and 12 deletions

View File

@@ -3,6 +3,7 @@ package grpc
import (
"runtime/debug"
"github.com/micro/go-micro/errors"
"github.com/micro/go-micro/transport"
pb "github.com/micro/go-micro/transport/grpc/proto"
"github.com/micro/go-micro/util/log"
@@ -16,6 +17,8 @@ type microTransport struct {
}
func (m *microTransport) Stream(ts pb.Transport_StreamServer) error {
var err error
sock := &grpcTransportSocket{
stream: ts,
local: m.addr,
@@ -30,10 +33,12 @@ func (m *microTransport) Stream(ts pb.Transport_StreamServer) error {
if r := recover(); r != nil {
log.Log(r, string(debug.Stack()))
sock.Close()
err = errors.InternalServerError("go.micro.transport", "panic recovered: %v", r)
}
}()
// execute socket func
m.fn(sock)
return nil
return err
}