Skip to content

Commit 3ae71c9

Browse files
committed
optimize IOHandler error handling
1 parent f8621c8 commit 3ae71c9

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

rpc/core/service.go

+18-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
| |
77
| rpc/core/service.go |
88
| |
9-
| LastModified: Mar 6, 2022 |
9+
| LastModified: Sep 13, 2023 |
1010
| Author: Ma Bingyao <[email protected]> |
1111
| |
1212
\*________________________________________________________*/
@@ -103,26 +103,34 @@ func (s *Service) GetHandler(name string) Handler {
103103

104104
// Handle the reqeust and returns the response.
105105
func (s *Service) Handle(ctx context.Context, request []byte) ([]byte, error) {
106-
return s.ioManager.Handler().(NextIOHandler)(ctx, request)
106+
response, err := s.ioManager.Handler().(NextIOHandler)(ctx, request)
107+
if len(response) == 0 {
108+
serviceContext := GetServiceContext(ctx)
109+
if err == nil {
110+
return s.Codec.Encode(nil, serviceContext)
111+
}
112+
return s.Codec.Encode(err, serviceContext)
113+
}
114+
return response, err
107115
}
108116

109117
// Process the reqeust and returns the response.
110118
func (s *Service) Process(ctx context.Context, request []byte) ([]byte, error) {
111119
serviceContext := GetServiceContext(ctx)
112120
name, args, err := s.Codec.Decode(request, serviceContext)
113121
if err != nil {
114-
return s.Codec.Encode(err, serviceContext)
122+
return nil, err
115123
}
116124
var result interface{}
117125
func() {
118126
defer func() {
119127
if p := recover(); p != nil {
120-
result = NewPanicError(p)
128+
err = NewPanicError(p)
121129
}
122130
}()
123-
results, err := s.invokeManager.Handler().(NextInvokeHandler)(ctx, name, args)
124-
if err != nil {
125-
result = err
131+
results, e := s.invokeManager.Handler().(NextInvokeHandler)(ctx, name, args)
132+
if e != nil {
133+
err = e
126134
return
127135
}
128136
switch len(results) {
@@ -134,6 +142,9 @@ func (s *Service) Process(ctx context.Context, request []byte) ([]byte, error) {
134142
result = results
135143
}
136144
}()
145+
if err != nil {
146+
return nil, err
147+
}
137148
return s.Codec.Encode(result, serviceContext)
138149
}
139150

0 commit comments

Comments
 (0)