integration: configure keepalive parameters for server

Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
This commit is contained in:
Gyu-Ho Lee
2017-08-25 13:32:46 -07:00
parent 741d7e9dca
commit 044aca7f50

View File

@ -53,6 +53,7 @@ import (
"github.com/coreos/pkg/capnslog" "github.com/coreos/pkg/capnslog"
"github.com/soheilhy/cmux" "github.com/soheilhy/cmux"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/keepalive"
) )
const ( const (
@ -98,6 +99,9 @@ type ClusterConfig struct {
QuotaBackendBytes int64 QuotaBackendBytes int64
MaxTxnOps uint MaxTxnOps uint
MaxRequestBytes uint MaxRequestBytes uint
GRPCKeepAliveMinTime time.Duration
GRPCKeepAliveInterval time.Duration
GRPCKeepAliveTimeout time.Duration
} }
type cluster struct { type cluster struct {
@ -231,6 +235,9 @@ func (c *cluster) mustNewMember(t *testing.T) *member {
quotaBackendBytes: c.cfg.QuotaBackendBytes, quotaBackendBytes: c.cfg.QuotaBackendBytes,
maxTxnOps: c.cfg.MaxTxnOps, maxTxnOps: c.cfg.MaxTxnOps,
maxRequestBytes: c.cfg.MaxRequestBytes, maxRequestBytes: c.cfg.MaxRequestBytes,
grpcKeepAliveMinTime: c.cfg.GRPCKeepAliveMinTime,
grpcKeepAliveInterval: c.cfg.GRPCKeepAliveInterval,
grpcKeepAliveTimeout: c.cfg.GRPCKeepAliveTimeout,
}) })
m.DiscoveryURL = c.cfg.DiscoveryURL m.DiscoveryURL = c.cfg.DiscoveryURL
if c.cfg.UseGRPC { if c.cfg.UseGRPC {
@ -482,6 +489,7 @@ type member struct {
s *etcdserver.EtcdServer s *etcdserver.EtcdServer
serverClosers []func() serverClosers []func()
grpcServerOpts []grpc.ServerOption
grpcServer *grpc.Server grpcServer *grpc.Server
grpcServerPeer *grpc.Server grpcServerPeer *grpc.Server
grpcAddr string grpcAddr string
@ -502,6 +510,9 @@ type memberConfig struct {
quotaBackendBytes int64 quotaBackendBytes int64
maxTxnOps uint maxTxnOps uint
maxRequestBytes uint maxRequestBytes uint
grpcKeepAliveMinTime time.Duration
grpcKeepAliveInterval time.Duration
grpcKeepAliveTimeout time.Duration
} }
// mustNewMember return an inited member with the given name. If peerTLS is // mustNewMember return an inited member with the given name. If peerTLS is
@ -558,6 +569,21 @@ func mustNewMember(t *testing.T, mcfg memberConfig) *member {
m.MaxRequestBytes = embed.DefaultMaxRequestBytes m.MaxRequestBytes = embed.DefaultMaxRequestBytes
} }
m.AuthToken = "simple" // for the purpose of integration testing, simple token is enough m.AuthToken = "simple" // for the purpose of integration testing, simple token is enough
m.grpcServerOpts = []grpc.ServerOption{}
if mcfg.grpcKeepAliveMinTime > time.Duration(0) {
m.grpcServerOpts = append(m.grpcServerOpts, grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
MinTime: mcfg.grpcKeepAliveMinTime,
PermitWithoutStream: false,
}))
}
if mcfg.grpcKeepAliveInterval > time.Duration(0) &&
mcfg.grpcKeepAliveTimeout > time.Duration(0) {
m.grpcServerOpts = append(m.grpcServerOpts, grpc.KeepaliveParams(keepalive.ServerParameters{
Time: mcfg.grpcKeepAliveInterval,
Timeout: mcfg.grpcKeepAliveTimeout,
}))
}
return m return m
} }
@ -672,7 +698,7 @@ func (m *member) Launch() error {
return err return err
} }
} }
m.grpcServer = v3rpc.Server(m.s, tlscfg) m.grpcServer = v3rpc.Server(m.s, tlscfg, m.grpcServerOpts...)
m.grpcServerPeer = v3rpc.Server(m.s, peerTLScfg) m.grpcServerPeer = v3rpc.Server(m.s, peerTLScfg)
m.serverClient = v3client.New(m.s) m.serverClient = v3client.New(m.s)
lockpb.RegisterLockServer(m.grpcServer, v3lock.NewLockServer(m.serverClient)) lockpb.RegisterLockServer(m.grpcServer, v3lock.NewLockServer(m.serverClient))