Skip to content

Commit 8a9e8cf

Browse files
committed
proper closed msgs
1 parent a313d3d commit 8a9e8cf

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

plugin/adapters/plugin/process.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ import (
1414
"sync/atomic"
1515
"time"
1616

17+
"google.golang.org/grpc/codes"
18+
"google.golang.org/grpc/status"
19+
1720
"google.golang.org/protobuf/proto"
1821

1922
"github.com/secmc/plugin/plugin/adapters/grpc"
@@ -217,7 +220,14 @@ func (p *pluginProcess) sendLoop() {
217220
continue
218221
}
219222
if err := p.stream.Send(data); err != nil {
220-
p.log.Error("send message", "error", err)
223+
// Treat expected shutdown conditions as non-errors.
224+
if st, ok := status.FromError(err); ok && (st.Code() == codes.Canceled || st.Code() == codes.Unavailable) {
225+
p.log.Info("connection closed", "reason", st.Code().String())
226+
} else if errors.Is(err, io.EOF) || errors.Is(err, context.Canceled) {
227+
p.log.Info("connection closed", "reason", "canceled")
228+
} else {
229+
p.log.Error("send message", "error", err)
230+
}
221231
p.Stop()
222232
return
223233
}
@@ -230,7 +240,16 @@ func (p *pluginProcess) recvLoop() {
230240
for {
231241
data, err := p.stream.Recv()
232242
if err != nil {
233-
if !errors.Is(err, io.EOF) && !errors.Is(err, context.Canceled) {
243+
if st, ok := status.FromError(err); ok {
244+
switch st.Code() {
245+
case codes.Canceled, codes.Unavailable:
246+
p.log.Info("connection closed", "reason", st.Code().String())
247+
default:
248+
p.log.Error("receive message", "error", err)
249+
}
250+
} else if errors.Is(err, io.EOF) || errors.Is(err, context.Canceled) {
251+
p.log.Info("connection closed", "reason", "canceled")
252+
} else {
234253
p.log.Error("receive message", "error", err)
235254
}
236255
p.Stop()

0 commit comments

Comments
 (0)