From fa2c7059a24bd879a5cb28d71dd45ed85155ff1c Mon Sep 17 00:00:00 2001 From: Matt Keeler Date: Mon, 11 Feb 2019 11:12:24 -0500 Subject: [PATCH] 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. --- agent/consul/server.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/agent/consul/server.go b/agent/consul/server.go index c3893b207..f9ed7ba25 100644 --- a/agent/consul/server.go +++ b/agent/consul/server.go @@ -461,6 +461,11 @@ func NewServerLogger(config *Config, logger *log.Logger, tokens *token.Store) (* s.Shutdown() 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 // since it can fire events when leadership is obtained. @@ -477,9 +482,6 @@ func NewServerLogger(config *Config, logger *log.Logger, tokens *token.Store) (* // Start the metrics handlers. go s.sessionStats() - // Initialize Autopilot - s.initAutopilot(config) - return s, nil }