Move autopilot initialization to prevent race (#5322)

`establishLeadership` invoked during leadership monitoring may use autopilot to do promotions etc. There was a race with doing that and having autopilot initialized and this fixes it.
This commit is contained in:
Matt Keeler 2019-02-11 11:12:24 -05:00 committed by GitHub
parent d7e4151fcb
commit 7073ba4ed2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 3 deletions

View File

@ -462,6 +462,11 @@ func NewServerLogger(config *Config, logger *log.Logger, tokens *token.Store) (*
return nil, err return nil, err
} }
// Initialize Autopilot. This must happen before starting leadership monitoring
// as establishing leadership could attempt to use autopilot and cause a panic.
s.initAutopilot(config)
// Start monitoring leadership. This must happen after Serf is set up // Start monitoring leadership. This must happen after Serf is set up
// since it can fire events when leadership is obtained. // since it can fire events when leadership is obtained.
go s.monitorLeadership() go s.monitorLeadership()
@ -477,9 +482,6 @@ func NewServerLogger(config *Config, logger *log.Logger, tokens *token.Store) (*
// Start the metrics handlers. // Start the metrics handlers.
go s.sessionStats() go s.sessionStats()
// Initialize Autopilot
s.initAutopilot(config)
return s, nil return s, nil
} }