Browse Source

Merge pull request #1359 from gravitl/bugfix_v0.14.5_mq_connection

Bugfix v0.14.5 mq connection retries
dcarns 3 years ago
parent
commit
e52fc87a68
1 changed files with 20 additions and 13 deletions
  1. 20 13
      netclient/functions/daemon.go

+ 20 - 13
netclient/functions/daemon.go

@@ -262,22 +262,29 @@ func setupMQTT(cfg *config.ClientConfig, publish bool) (mqtt.Client, error) {
 		logger.Log(0, "detected broker connection lost for", cfg.Server.Server)
 	})
 	client := mqtt.NewClient(opts)
-	for token := client.Connect(); !token.WaitTimeout(30*time.Second) || token.Error() != nil; token = client.Connect() {
-		logger.Log(0, "unable to connect to broker, retrying ...")
-		var err error
-		if token.Error() == nil {
-			err = errors.New("connect timeout")
-		} else {
-			err = token.Error()
-		}
-		if err := checkBroker(cfg.Server.Server, cfg.Server.MQPort); err != nil {
-			return nil, err
+	var connecterr error
+	for count := 0; count < 3; count++ {
+		connecterr = nil
+		if token := client.Connect(); !token.WaitTimeout(30*time.Second) || token.Error() != nil {
+			logger.Log(0, "unable to connect to broker, retrying ...")
+			if token.Error() == nil {
+				connecterr = errors.New("connect timeout")
+			} else {
+				connecterr = token.Error()
+			}
+			if err := checkBroker(cfg.Server.Server, cfg.Server.MQPort); err != nil {
+				logger.Log(0, "could not connect to broker", cfg.Server.Server, err.Error())
+			}
 		}
-		logger.Log(0, "could not connect to broker", cfg.Server.Server, err.Error())
-		if strings.Contains(err.Error(), "connectex") || strings.Contains(err.Error(), "connect timeout") {
-			reRegisterWithServer(cfg)
+	}
+	if connecterr != nil {
+		reRegisterWithServer(cfg)
+		//try after re-registering
+		if token := client.Connect(); !token.WaitTimeout(30*time.Second) || token.Error() != nil {
+			return client, errors.New("unable to connect to broker")
 		}
 	}
+
 	return client, nil
 }