mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-16 01:01:03 +00:00
Merge pull request #1483 from travisturner/close-gossip
add gossip Closer
This commit is contained in:
commit
08fe3db1cc
2 changed files with 20 additions and 2 deletions
|
|
@ -93,6 +93,17 @@ func (g *memberSet) Open() (err error) {
|
|||
return nil
|
||||
}
|
||||
|
||||
// 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)
|
||||
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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue