diff --git a/agent/consul/leader.go b/agent/consul/leader.go index d71c3ead3..4d61ed0c4 100644 --- a/agent/consul/leader.go +++ b/agent/consul/leader.go @@ -489,19 +489,22 @@ func (s *Server) createCAProvider(conf *structs.CAConfiguration) (connect.CAProv func (s *Server) getCAProvider() connect.CAProvider { retries := 0 + var result connect.CAProvider + for result == nil { + s.caProviderLock.RLock() + result = s.caProvider + s.caProviderLock.RUnlock() -RETRY_PROVIDER: - s.caProviderLock.RLock() - result := s.caProvider - s.caProviderLock.RUnlock() + // In cases where an agent is started with managed proxies, we may ask + // for the provider before establishLeadership completes. If we're the + // leader, then wait and get the provider again + if result == nil && s.IsLeader() && retries < 10 { + retries++ + time.Sleep(50 * time.Millisecond) + continue + } - // In cases where an agent is started with managed proxies, we may ask - // for the provider before establishLeadership completes. If we're the - // leader, then wait and get the provider again - if result == nil && s.IsLeader() && retries < 10 { - retries++ - time.Sleep(50 * time.Millisecond) - goto RETRY_PROVIDER + break } return result