From fcc8fce4d22074ecc59b8d4647b3df31ded71707 Mon Sep 17 00:00:00 2001 From: Piotr Tabor Date: Wed, 15 Jun 2022 12:14:21 +0200 Subject: [PATCH 1/2] Expand logging in case of embed server not being able to successfully start. So far the errors were directed to Etcd.Errc (channel) that is not being consumed in practice. Signed-off-by: Piotr Tabor --- server/embed/etcd.go | 3 +++ server/embed/serve.go | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/server/embed/etcd.go b/server/embed/etcd.go index ffd239c79..a23d8c776 100644 --- a/server/embed/etcd.go +++ b/server/embed/etcd.go @@ -766,6 +766,9 @@ func (e *Etcd) serveMetrics() (err error) { } func (e *Etcd) errHandler(err error) { + if err != nil { + e.GetLogger().Error("setting up serving from embedded etcd failed.", zap.Error(err)) + } select { case <-e.stopc: return diff --git a/server/embed/serve.go b/server/embed/serve.go index bce15a339..da3a67c0d 100644 --- a/server/embed/serve.go +++ b/server/embed/serve.go @@ -114,7 +114,9 @@ func (sctx *serveCtx) serve( var gs *grpc.Server defer func() { if err != nil && gs != nil { + sctx.lg.Warn("stopping grpc server due to error", zap.Error(err)) gs.Stop() + sctx.lg.Warn("stopped grpc server due to error", zap.Error(err)) } }() @@ -132,6 +134,7 @@ func (sctx *serveCtx) serve( if s.Cfg.EnableGRPCGateway { gwmux, err = sctx.registerGateway([]grpc.DialOption{grpc.WithInsecure()}) if err != nil { + sctx.lg.Error("registerGateway failed", zap.Error(err)) return err } } @@ -238,6 +241,7 @@ func (sctx *serveCtx) registerGateway(opts []grpc.DialOption) (*gw.ServeMux, err conn, err := grpc.DialContext(ctx, addr, opts...) if err != nil { + sctx.lg.Error("registerGateway failed to dial", zap.String("addr", addr), zap.Error(err)) return nil, err } gwmux := gw.NewServeMux() From 1c401581e3672424af62d76aa52ec6c94ffbc67b Mon Sep 17 00:00:00 2001 From: Piotr Tabor Date: Wed, 15 Jun 2022 12:35:55 +0200 Subject: [PATCH 2/2] Close channel of started servers even if embed server fails to start. Before this change: ``` gwmux, err = sctx.registerGateway([]grpc.DialOption{grpc.WithInsecure()}) if err != nil { return err; } ``` caused the Etcd.Serve() method finish without sctx.serversC channel being closed. The code closing Etcd got stuck waiting for all the servers to be running. Signed-off-by: Piotr Tabor --- server/embed/serve.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/embed/serve.go b/server/embed/serve.go index da3a67c0d..595a4e4d2 100644 --- a/server/embed/serve.go +++ b/server/embed/serve.go @@ -120,6 +120,9 @@ func (sctx *serveCtx) serve( } }() + // Make sure serversC is closed even if we prematurely exit the function. + defer close(sctx.serversC) + if sctx.insecure { gs = v3rpc.Server(s, nil, nil, gopts...) v3electionpb.RegisterElectionServer(gs, servElection) @@ -203,7 +206,6 @@ func (sctx *serveCtx) serve( ) } - close(sctx.serversC) return m.Serve() }