mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-19 19:40:19 +00:00
47 lines
1.7 KiB
Markdown
47 lines
1.7 KiB
Markdown
|
# Keepalive
|
||
|
|
||
|
gRPC sends http2 pings on the transport to detect if the connection is down. If
|
||
|
the ping is not acknowledged by the other side within a certain period, the
|
||
|
connection will be close. Note that pings are only necessary when there's no
|
||
|
activity on the connection.
|
||
|
|
||
|
For how to configure keepalive, see
|
||
|
https://godoc.org/google.golang.org/grpc/keepalive for the options.
|
||
|
|
||
|
## What should I set?
|
||
|
|
||
|
It should be sufficient for most users to set [client
|
||
|
parameters](https://godoc.org/google.golang.org/grpc/keepalive) as a [dial
|
||
|
option](https://godoc.org/google.golang.org/grpc#WithKeepaliveParams).
|
||
|
|
||
|
## What will happen?
|
||
|
|
||
|
(The behavior described here is specific for gRPC-go, it might be slightly
|
||
|
different in other languages.)
|
||
|
|
||
|
When there's no activity on a connection (note that an ongoing stream results in
|
||
|
__no activity__ when there's no message being sent), after `Time`, a ping will
|
||
|
be sent by the client and the server will send a ping ack when it gets the ping.
|
||
|
Client will wait for `Timeout`, and check if there's any activity on the
|
||
|
connection during this period (a ping ack is an activity).
|
||
|
|
||
|
## What about server side?
|
||
|
|
||
|
Server has similar `Time` and `Timeout` settings as client. Server can also
|
||
|
configure connection max-age. See [server
|
||
|
parameters](https://godoc.org/google.golang.org/grpc/keepalive#ServerParameters)
|
||
|
for details.
|
||
|
|
||
|
### Enforcement policy
|
||
|
|
||
|
[Enforcement
|
||
|
policy](https://godoc.org/google.golang.org/grpc/keepalive#ServerParameters) is
|
||
|
a special setting on server side to protect server from malicious or misbehaving
|
||
|
clients.
|
||
|
|
||
|
Server sends GOAWAY with ENHANCE_YOUR_CALM and close the connection when bad
|
||
|
behaviors are detected:
|
||
|
- Client sends too frequent pings
|
||
|
- Client sends pings when there's no stream and this is disallowed by server
|
||
|
config
|