From bfbcb59873b324712dd9f4bff261771a4e04dfb8 Mon Sep 17 00:00:00 2001 From: Mikhail Fesenko Date: Wed, 24 Jul 2024 16:10:01 +0200 Subject: [PATCH] Make connection to zookeeper connect in cycle to allmachines in zookeeper list --- core/internal/helpers/zookeeper.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/core/internal/helpers/zookeeper.go b/core/internal/helpers/zookeeper.go index cfa3a6be..b008707c 100644 --- a/core/internal/helpers/zookeeper.go +++ b/core/internal/helpers/zookeeper.go @@ -12,6 +12,7 @@ package helpers import ( "crypto/tls" "crypto/x509" + stderrors "errors" "net" "os" "time" @@ -57,9 +58,24 @@ func ZookeeperConnectTLS(servers []string, sessionTimeout time.Duration, logger logger.Info("starting zookeeper (TLS)", zap.String("caFile", caFile), zap.String("certFile", certFile), zap.String("keyFile", keyFile)) - dialer, err := newTLSDialer(servers[0], caFile, certFile, keyFile) - if err != nil { - return nil, nil, err + var dialer zk.Dialer = nil + var connectivityErrors error + + for _, server := range servers { + var err error + dialer, err = newTLSDialer(server, caFile, certFile, keyFile) + if err != nil { + logger.Error("failed to create TLS dialer to server", zap.String("server", server), zap.Error(err)) + connectivityErrors = stderrors.Join(connectivityErrors, err) + } else { + // we found a working server, so we can stop looking + logger.Info("created TLS dialer to server", zap.String("server", server)) + break + } + } + + if dialer == nil { + return nil, nil, connectivityErrors } // We need a function to set the logger for the ZK connection