File tree 2 files changed +23
-3
lines changed
2 files changed +23
-3
lines changed Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ cancelation
18
18
cluster_proxy
19
19
defragment
20
20
defragmenting
21
+ errClientDisconnected
21
22
etcd
22
23
gRPC
23
24
goroutine
@@ -43,4 +44,3 @@ too_many_pings
43
44
uncontended
44
45
unprefixed
45
46
unlisting
46
-
Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ package v3rpc
16
16
17
17
import (
18
18
"context"
19
+ "strings"
19
20
20
21
"github.com/coreos/etcd/auth"
21
22
"github.com/coreos/etcd/etcdserver"
@@ -91,6 +92,25 @@ func isClientCtxErr(ctxErr error, err error) bool {
91
92
if ! ok {
92
93
return false
93
94
}
94
- code := ev .Code ()
95
- return code == codes .Canceled || code == codes .DeadlineExceeded
95
+
96
+ switch ev .Code () {
97
+ case codes .Canceled , codes .DeadlineExceeded :
98
+ // client-side context cancel or deadline exceeded
99
+ // "rpc error: code = Canceled desc = context canceled"
100
+ // "rpc error: code = DeadlineExceeded desc = context deadline exceeded"
101
+ return true
102
+ case codes .Unavailable :
103
+ msg := ev .Message ()
104
+ // client-side context cancel or deadline exceeded with TLS ("http2.errClientDisconnected")
105
+ // "rpc error: code = Unavailable desc = client disconnected"
106
+ if msg == "client disconnected" {
107
+ return true
108
+ }
109
+ // "grpc/transport.ClientTransport.CloseStream" on canceled streams
110
+ // "rpc error: code = Unavailable desc = stream error: stream ID 21; CANCEL")
111
+ if strings .HasPrefix (msg , "stream error: " ) && strings .HasSuffix (msg , "; CANCEL" ) {
112
+ return true
113
+ }
114
+ }
115
+ return false
96
116
}
You can’t perform that action at this time.
0 commit comments