clientv3/client.go
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,
			PermitWithoutStream: c.cfg.PermitWithoutStream,
		}
		opts = append(opts, grpc.WithKeepaliveParams(params))
	}
	opts = append(opts, dopts...)

	// Provide a net dialer that supports cancelation and timeout.
	f := func(dialEp string, t time.Duration) (net.Conn, error) {
		proto, host, _ := endpoint.ParseEndpoint(dialEp)
		select {
		case <-c.ctx.Done():
			return nil, c.ctx.Err()
		default:
		}
		dialer := &net.Dialer{Timeout: t}
		return dialer.DialContext(c.ctx, proto, host)
	}
	opts = append(opts, grpc.WithDialer(f))

	if creds != nil {
		opts = append(opts, grpc.WithTransportCredentials(*creds))
	} else {
		opts = append(opts, grpc.WithInsecure())
	}

	// Interceptor retry and backoff.
	// TODO: Replace all of clientv3/retry.go with interceptor based retry, or with
	// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#retry-policy
	// once it is available.
	rrBackoff := withBackoff(c.roundRobinQuorumBackoff(defaultBackoffWaitBetween, defaultBackoffJitterFraction))
	opts = append(opts,
		// Disable stream retry by default since go-grpc-middleware/retry does not support client streams.
		// Streams that are safe to retry are enabled individually.
		grpc.WithStreamInterceptor(c.streamClientInterceptor(c.lg, withMax(0), rrBackoff)),
		grpc.WithUnaryInterceptor(c.unaryClientInterceptor(c.lg, withMax(defaultUnaryMaxRetries), rrBackoff)),
	)

	return opts, nil
}
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,
			PermitWithoutStream: c.cfg.PermitWithoutStream,
		}
		opts = append(opts, grpc.WithKeepaliveParams(params))
	}
	opts = append(opts, dopts...)

	// Provide a net dialer that supports cancelation and timeout.
	f := func(dialEp string, t time.Duration) (net.Conn, error) {
		proto, host, _ := endpoint.ParseEndpoint(dialEp)
		select {
		case <-c.ctx.Done():
			return nil, c.ctx.Err()
		default:
		}
		dialer := &net.Dialer{Timeout: t}
		return dialer.DialContext(c.ctx, proto, host)
	}
	opts = append(opts, grpc.WithDialer(f))

	if creds != nil {
		opts = append(opts, grpc.WithTransportCredentials(*creds))
	} else {
		opts = append(opts, grpc.WithInsecure())
	}

	// Interceptor retry and backoff.
	// TODO: Replace all of clientv3/retry.go with interceptor based retry, or with
	// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#retry-policy
	// once it is available.
	rrBackoff := withBackoff(c.roundRobinQuorumBackoff(defaultBackoffWaitBetween, defaultBackoffJitterFraction))
	opts = append(opts,
		// Disable stream retry by default since go-grpc-middleware/retry does not support client streams.
		// Streams that are safe to retry are enabled individually.
		grpc.WithStreamInterceptor(c.streamClientInterceptor(c.lg, withMax(0), rrBackoff)),
		grpc.WithUnaryInterceptor(c.unaryClientInterceptor(c.lg, withMax(defaultUnaryMaxRetries), rrBackoff)),
	)

	return opts, nil
}
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 , PermitWithoutStream : c . cfg . PermitWithoutStream , } opts = append ( opts , grpc . WithKeepaliveParams ( params ) ) } opts = append ( opts , dopts ... ) // Provide a net dialer that supports cancelation and timeout. f := func ( dialEp string , t time . Duration ) ( net . Conn , error ) { proto , host , _ := endpoint . ParseEndpoint ( dialEp ) select { case <- c . ctx . Done ( ) : return nil , c . ctx . Err ( ) default : } dialer := & net . Dialer { Timeout : t } return dialer . DialContext ( c . ctx , proto , host ) } opts = append ( opts , grpc . WithDialer ( f ) ) if creds != nil { opts = append ( opts , grpc . WithTransportCredentials ( * creds ) ) } else { opts = append ( opts , grpc . WithInsecure ( ) ) } // Interceptor retry and backoff. // TODO: Replace all of clientv3/retry.go with interceptor based retry, or with // https://github.com/grpc/proposal/blob/master/A6-client-retries.md#retry-policy // once it is available. rrBackoff := withBackoff ( c . roundRobinQuorumBackoff ( defaultBackoffWaitBetween , defaultBackoffJitterFraction ) ) opts = append ( opts , // Disable stream retry by default since go-grpc-middleware/retry does not support client streams. // Streams that are safe to retry are enabled individually. grpc . WithStreamInterceptor ( c . streamClientInterceptor ( c . lg , withMax ( 0 ) , rrBackoff ) ) , grpc . WithUnaryInterceptor ( c . unaryClientInterceptor ( c . lg , withMax ( defaultUnaryMaxRetries ) , rrBackoff ) ) , ) return opts , nil }
// dialSetupOpts gives the dial opts prior to any authentication.
dialSetupOpts gives the dial opts prior to any authentication .