From e1bc240a140bb19489f0afcb2ffbe7f4ae992c70 Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Sun, 13 Jan 2019 12:15:35 +0000 Subject: [PATCH] Respond with error type --- codec/jsonrpc/jsonrpc.go | 2 +- codec/protorpc/protorpc.go | 2 +- server/rpc_server.go | 14 ++++++++++---- transport/http_transport.go | 3 --- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/codec/jsonrpc/jsonrpc.go b/codec/jsonrpc/jsonrpc.go index 9f9cd6a2..8f0c2c4f 100644 --- a/codec/jsonrpc/jsonrpc.go +++ b/codec/jsonrpc/jsonrpc.go @@ -31,7 +31,7 @@ func (j *jsonCodec) Write(m *codec.Message, b interface{}) error { switch m.Type { case codec.Request: return j.c.Write(m, b) - case codec.Response: + case codec.Response, codec.Error: return j.s.Write(m, b) case codec.Publication: data, err := json.Marshal(b) diff --git a/codec/protorpc/protorpc.go b/codec/protorpc/protorpc.go index a7d8ba79..f207e5ae 100644 --- a/codec/protorpc/protorpc.go +++ b/codec/protorpc/protorpc.go @@ -70,7 +70,7 @@ func (c *protoCodec) Write(m *codec.Message, b interface{}) error { return err } } - case codec.Response: + case codec.Response, codec.Error: c.Lock() defer c.Unlock() rtmp := &Response{ServiceMethod: &m.Endpoint, Seq: id(m.Id), Error: &m.Error} diff --git a/server/rpc_server.go b/server/rpc_server.go index cd7a5edb..93b49d4d 100644 --- a/server/rpc_server.go +++ b/server/rpc_server.go @@ -110,14 +110,14 @@ func (s *rpcServer) ServeConn(sock transport.Socket) { return } - codec := newRpcCodec(&msg, sock, cf) + rcodec := newRpcCodec(&msg, sock, cf) // internal request request := &rpcRequest{ service: msg.Header["X-Micro-Service"], endpoint: msg.Header["X-Micro-Endpoint"], contentType: ct, - codec: codec, + codec: rcodec, header: msg.Header, body: msg.Body, socket: sock, @@ -128,7 +128,7 @@ func (s *rpcServer) ServeConn(sock transport.Socket) { response := &rpcResponse{ header: make(map[string]string), socket: sock, - codec: codec, + codec: rcodec, } // set router @@ -150,8 +150,14 @@ func (s *rpcServer) ServeConn(sock transport.Socket) { // TODO: handle error better if err := handler(ctx, request, response); err != nil { + // write an error response + rcodec.Write(&codec.Message{ + Header: msg.Header, + Error: err.Error(), + Type: codec.Error, + }, nil) + s.wg.Done() - log.Logf("Unexpected error serving request, closing socket: %v", err) return } diff --git a/transport/http_transport.go b/transport/http_transport.go index 885459aa..154448da 100644 --- a/transport/http_transport.go +++ b/transport/http_transport.go @@ -245,9 +245,6 @@ func (h *httpTransportSocket) Recv(m *Message) error { } } - // set path - m.Header[":path"] = h.r.URL.Path - // return early early return nil }