Browse Source

Merge pull request #10146 from spzala/clientpermitwithoutstream

clientv3: let etcd client use all available keepalive ClientParams
Gyuho Lee 7 years ago
parent
commit
1d1f509e98
3 changed files with 9 additions and 2 deletions
  1. 3 0
      CHANGELOG-3.4.md
  2. 3 2
      clientv3/client.go
  3. 3 0
      clientv3/config.go

+ 3 - 0
CHANGELOG-3.4.md

@@ -385,6 +385,9 @@ Note: **v3.5 will deprecate `etcd --log-package-levels` flag for `capnslog`**; `
 - Fix [lease keepalive interval updates when response queue is full](https://github.com/etcd-io/etcd/pull/9952).
   - If `<-chan *clientv3LeaseKeepAliveResponse` from `clientv3.Lease.KeepAlive` was never consumed or channel is full, client was [sending keepalive request every 500ms](https://github.com/etcd-io/etcd/issues/9911) instead of expected rate of every "TTL / 3" duration.
 - Change [snapshot file permissions](https://github.com/etcd-io/etcd/pull/9977): On Linux, the snapshot file changes from readable by all (mode 0644) to readable by the user only (mode 0600).
+- Client may choose to send keepalive pings to server using [`PermitWithoutStream`](https://github.com/etcd-io/etcd/pull/10146).
+  - By setting `PermitWithoutStream` to true, client can send keepalive pings to server without any active streams(RPCs). In other words, it allows sending keepalive pings with unary or simple RPC calls.
+  - `PermitWithoutStream` is set to false by default.
 
 ### etcdctl v3
 

+ 3 - 2
clientv3/client.go

@@ -233,8 +233,9 @@ func (c *Client) processCreds(scheme string) (creds *credentials.TransportCreden
 func (c *Client) dialSetupOpts(creds *credentials.TransportCredentials, dopts ...grpc.DialOption) (opts []grpc.DialOption, err error) {
 	if c.cfg.DialKeepAliveTime > 0 {
 		params := keepalive.ClientParameters{
-			Time:    c.cfg.DialKeepAliveTime,
-			Timeout: c.cfg.DialKeepAliveTimeout,
+			Time:                c.cfg.DialKeepAliveTime,
+			Timeout:             c.cfg.DialKeepAliveTimeout,
+			PermitWithoutStream: c.cfg.PermitWithoutStream,
 		}
 		opts = append(opts, grpc.WithKeepaliveParams(params))
 	}

+ 3 - 0
clientv3/config.go

@@ -78,6 +78,9 @@ type Config struct {
 	// If nil, use the default logger.
 	// TODO: configure gRPC logger
 	LogConfig *zap.Config
+
+	// PermitWithoutStream, if set true, client can send keepalive pings to server without any active streams(RPCs).
+	PermitWithoutStream bool `json:"permit-without-stream"`
 }
 
 // DefaultLogConfig is the default client logging configuration.