To adhere with protocol the server should send RST_STREAM on observing timeout on a strea, (#1130)
diff --git a/transport/http2_client.go b/transport/http2_client.go
index 486d4a1..0c1582a 100644
--- a/transport/http2_client.go
+++ b/transport/http2_client.go
@@ -560,9 +560,12 @@
}
s.state = streamDone
s.mu.Unlock()
- if _, ok := err.(StreamError); ok {
+ if se, ok := err.(StreamError); ok {
rstStream = true
rstError = http2.ErrCodeCancel
+ if se.Code == codes.DeadlineExceeded {
+ rstError = http2.ErrCodeInternal
+ }
}
}
diff --git a/transport/http2_server.go b/transport/http2_server.go
index 31fefc7..9271bb4 100644
--- a/transport/http2_server.go
+++ b/transport/http2_server.go
@@ -741,6 +741,9 @@
}
t.stats.HandleRPC(s.Context(), outTrailer)
}
+ if statusCode == codes.DeadlineExceeded {
+ t.controlBuf.put(&resetStream{s.id, http2.ErrCodeInternal})
+ }
t.closeStream(s)
t.writableChan <- 0
return nil