5536: Keepproxy retry keep server discovery on error or empty list.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Mon, 23 Mar 2015 17:54:07 +0000 (13:54 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Mon, 23 Mar 2015 17:54:07 +0000 (13:54 -0400)
services/keepproxy/keepproxy.go

index b8c30d113ea38447266aeef3b1c579f80d877ee3..581f7f48739fd2fef826ef6b6dfae6c9a8baefec 100644 (file)
@@ -134,16 +134,27 @@ type ApiTokenCache struct {
 
 // Refresh the keep service list every five minutes.
 func RefreshServicesList(kc *keepclient.KeepClient) {
+       var sleeptime time.Duration
        for {
-               time.Sleep(300 * time.Second)
                oldservices := kc.ServiceRoots()
-               kc.DiscoverKeepServers()
-               newservices := kc.ServiceRoots()
-               s1 := fmt.Sprint(oldservices)
-               s2 := fmt.Sprint(newservices)
-               if s1 != s2 {
-                       log.Printf("Updated server list to %v", s2)
+               newservices, err := kc.DiscoverKeepServers()
+               if err == nil && len(newservices) > 0 {
+                       s1 := fmt.Sprint(oldservices)
+                       s2 := fmt.Sprint(newservices)
+                       if s1 != s2 {
+                               log.Printf("Updated server list to %v", s2)
+                       }
+                       sleeptime = 300 * time.Second
+               } else {
+                       // There was an error, or the list is empty, so wait 3 seconds and try again.
+                       if err != nil {
+                               log.Printf("Error retrieving server list: %v", err)
+                       } else {
+                               log.Printf("Retrieved an empty server list")
+                       }
+                       sleeptime = 3 * time.Second
                }
+               time.Sleep(sleeptime)
        }
 }