From 1723616aacc11d4c7d511a8332ead08713a70df7 Mon Sep 17 00:00:00 2001 From: Travis Turner Date: Tue, 10 Jul 2018 11:21:06 -0500 Subject: [PATCH 1/3] add gossip Closer --- gossip/gossip.go | 10 ++++++++++ server/server.go | 11 +++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/gossip/gossip.go b/gossip/gossip.go index 2b983376f..1e73b1dae 100644 --- a/gossip/gossip.go +++ b/gossip/gossip.go @@ -93,6 +93,16 @@ func (g *memberSet) Open() (err error) { return nil } +// Close implements the Closer interface. +func (g *memberSet) Close() error { + leaveErr := g.memberlist.Leave(5 * time.Second) + shutdownErr := g.memberlist.Shutdown() + if leaveErr != nil || shutdownErr != nil { + return fmt.Errorf("leaving: '%v', shutting down: '%v'", leaveErr, shutdownErr) + } + return nil +} + // joinWithRetry wraps the standard memberlist Join function in a retry. func (g *memberSet) joinWithRetry(hosts []string) error { err := retry(60, 2*time.Second, func() error { diff --git a/server/server.go b/server/server.go index e83cc1c1c..d5d711e56 100644 --- a/server/server.go +++ b/server/server.go @@ -62,6 +62,7 @@ type Command struct { // Gossip transport gossipTransport *gossip.Transport + gossipMemberSet io.Closer // Standard input/output *pilosa.CmdIO @@ -326,6 +327,8 @@ func (m *Command) setupNetworking() error { if err != nil { return errors.Wrap(err, "getting memberset") } + m.gossipMemberSet = gossipMemberSet + return errors.Wrap(gossipMemberSet.Open(), "opening gossip memberset") } @@ -341,12 +344,16 @@ func (m *Command) Close() error { var logErr error handlerErr := m.Handler.Close() serveErr := m.Server.Close() + var gossipErr error + if m.gossipMemberSet != nil { + gossipErr = m.gossipMemberSet.Close() + } if closer, ok := m.logOutput.(io.Closer); ok { logErr = closer.Close() } close(m.done) - if serveErr != nil || logErr != nil || handlerErr != nil { - return fmt.Errorf("closing server: '%v', closing logs: '%v', closing handler: '%v'", serveErr, logErr, handlerErr) + if serveErr != nil || logErr != nil || handlerErr != nil || gossipErr != nil { + return fmt.Errorf("closing server: '%v', closing logs: '%v', closing handler: '%v', closing gossip: '%v'", serveErr, logErr, handlerErr, gossipErr) } return nil } From 4013cccb303aff7d3ecc57704f5185b557e60b79 Mon Sep 17 00:00:00 2001 From: Travis Turner Date: Tue, 10 Jul 2018 11:48:45 -0500 Subject: [PATCH 2/3] fix comment --- gossip/gossip.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gossip/gossip.go b/gossip/gossip.go index 1e73b1dae..40c15d23c 100644 --- a/gossip/gossip.go +++ b/gossip/gossip.go @@ -93,7 +93,8 @@ func (g *memberSet) Open() (err error) { return nil } -// Close implements the Closer interface. +// Close attempts to gracefully leaves the cluster, and finally calls shutdown +// after (at most) a timeout period. func (g *memberSet) Close() error { leaveErr := g.memberlist.Leave(5 * time.Second) shutdownErr := g.memberlist.Shutdown() From d24fb4e719c0b055d764188356de00dbb9ada47d Mon Sep 17 00:00:00 2001 From: Travis Turner Date: Tue, 10 Jul 2018 13:32:04 -0500 Subject: [PATCH 3/3] fix typo --- gossip/gossip.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gossip/gossip.go b/gossip/gossip.go index 40c15d23c..a5b4e9299 100644 --- a/gossip/gossip.go +++ b/gossip/gossip.go @@ -93,7 +93,7 @@ func (g *memberSet) Open() (err error) { return nil } -// Close attempts to gracefully leaves the cluster, and finally calls shutdown +// Close attempts to gracefully leave the cluster, and finally calls shutdown // after (at most) a timeout period. func (g *memberSet) Close() error { leaveErr := g.memberlist.Leave(5 * time.Second)