mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
embed: stop *grpc.Server on *serveCtx serve error
If serve errors before *grpc.Server is sent to serversC, it should be closed manually. Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
This commit is contained in:
parent
e3da56a8df
commit
9744e1ee87
@ -78,7 +78,7 @@ func (sctx *serveCtx) serve(
|
|||||||
tlsinfo *transport.TLSInfo,
|
tlsinfo *transport.TLSInfo,
|
||||||
handler http.Handler,
|
handler http.Handler,
|
||||||
errHandler func(error),
|
errHandler func(error),
|
||||||
gopts ...grpc.ServerOption) error {
|
gopts ...grpc.ServerOption) (err error) {
|
||||||
logger := defaultLog.New(ioutil.Discard, "etcdhttp", 0)
|
logger := defaultLog.New(ioutil.Discard, "etcdhttp", 0)
|
||||||
<-s.ReadyNotify()
|
<-s.ReadyNotify()
|
||||||
plog.Info("ready to serve client requests")
|
plog.Info("ready to serve client requests")
|
||||||
@ -88,8 +88,15 @@ func (sctx *serveCtx) serve(
|
|||||||
servElection := v3election.NewElectionServer(v3c)
|
servElection := v3election.NewElectionServer(v3c)
|
||||||
servLock := v3lock.NewLockServer(v3c)
|
servLock := v3lock.NewLockServer(v3c)
|
||||||
|
|
||||||
|
var gs *grpc.Server
|
||||||
|
defer func() {
|
||||||
|
if err != nil && gs != nil {
|
||||||
|
gs.Stop()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
if sctx.insecure {
|
if sctx.insecure {
|
||||||
gs := v3rpc.Server(s, nil, gopts...)
|
gs = v3rpc.Server(s, nil, gopts...)
|
||||||
v3electionpb.RegisterElectionServer(gs, servElection)
|
v3electionpb.RegisterElectionServer(gs, servElection)
|
||||||
v3lockpb.RegisterLockServer(gs, servLock)
|
v3lockpb.RegisterLockServer(gs, servLock)
|
||||||
if sctx.serviceRegister != nil {
|
if sctx.serviceRegister != nil {
|
||||||
@ -98,8 +105,8 @@ func (sctx *serveCtx) serve(
|
|||||||
grpcl := m.Match(cmux.HTTP2())
|
grpcl := m.Match(cmux.HTTP2())
|
||||||
go func() { errHandler(gs.Serve(grpcl)) }()
|
go func() { errHandler(gs.Serve(grpcl)) }()
|
||||||
|
|
||||||
opts := []grpc.DialOption{grpc.WithInsecure()}
|
var gwmux *gw.ServeMux
|
||||||
gwmux, err := sctx.registerGateway(opts)
|
gwmux, err = sctx.registerGateway([]grpc.DialOption{grpc.WithInsecure()})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -122,7 +129,7 @@ func (sctx *serveCtx) serve(
|
|||||||
if tlsErr != nil {
|
if tlsErr != nil {
|
||||||
return tlsErr
|
return tlsErr
|
||||||
}
|
}
|
||||||
gs := v3rpc.Server(s, tlscfg, gopts...)
|
gs = v3rpc.Server(s, tlscfg, gopts...)
|
||||||
v3electionpb.RegisterElectionServer(gs, servElection)
|
v3electionpb.RegisterElectionServer(gs, servElection)
|
||||||
v3lockpb.RegisterLockServer(gs, servLock)
|
v3lockpb.RegisterLockServer(gs, servLock)
|
||||||
if sctx.serviceRegister != nil {
|
if sctx.serviceRegister != nil {
|
||||||
@ -135,14 +142,16 @@ func (sctx *serveCtx) serve(
|
|||||||
dtls.InsecureSkipVerify = true
|
dtls.InsecureSkipVerify = true
|
||||||
creds := credentials.NewTLS(dtls)
|
creds := credentials.NewTLS(dtls)
|
||||||
opts := []grpc.DialOption{grpc.WithTransportCredentials(creds)}
|
opts := []grpc.DialOption{grpc.WithTransportCredentials(creds)}
|
||||||
gwmux, err := sctx.registerGateway(opts)
|
var gwmux *gw.ServeMux
|
||||||
|
gwmux, err = sctx.registerGateway(opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsl, lerr := transport.NewTLSListener(m.Match(cmux.Any()), tlsinfo)
|
var tlsl net.Listener
|
||||||
if lerr != nil {
|
tlsl, err = transport.NewTLSListener(m.Match(cmux.Any()), tlsinfo)
|
||||||
return lerr
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
// TODO: add debug flag; enable logging when debug flag is set
|
// TODO: add debug flag; enable logging when debug flag is set
|
||||||
httpmux := sctx.createMux(gwmux, handler)
|
httpmux := sctx.createMux(gwmux, handler)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user