From a313ccb29639e47c4efc003b19d8a6d2d3433a48 Mon Sep 17 00:00:00 2001 From: Matt DeBoer Date: Sat, 18 Mar 2017 23:05:42 -0700 Subject: [PATCH] add retries for ExpectedMembers; fail if len(expectedMembers) is 0 --- pkg/cmd/main.go | 1 + pkg/discovery/discovery.go | 39 +++++++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/pkg/cmd/main.go b/pkg/cmd/main.go index 2cdcf13..5d7c4ac 100644 --- a/pkg/cmd/main.go +++ b/pkg/cmd/main.go @@ -151,5 +151,6 @@ func parseArgs(c *cli.Context) *discovery.Discovery { ProxyMode: c.Bool("proxy"), IgnoreNamingMismatch: c.Bool("ignore-naming-mismatch"), MasterFilter: masterFilter, + MaxTries: 10, } } diff --git a/pkg/discovery/discovery.go b/pkg/discovery/discovery.go index e8bbe21..238d51f 100644 --- a/pkg/discovery/discovery.go +++ b/pkg/discovery/discovery.go @@ -63,16 +63,26 @@ func (d *Discovery) DiscoverEnvironment() (map[string]string, error) { } var expectedMembers []etcd.Member - if members, err := p.ExpectedMembers(d.MasterFilter, d.ClientScheme, - d.ClientPort, d.ServerScheme, d.ServerPort); err == nil { - for _, m := range members { - // have to cast here because of golang type-system--ugh! - expectedMembers = append(expectedMembers, etcd.Member(m)) + for tries := 0; tries < d.MaxTries && len(expectedMembers) == 0; tries++ { + if members, err := p.ExpectedMembers(d.MasterFilter, d.ClientScheme, + d.ClientPort, d.ServerScheme, d.ServerPort); err == nil { + for _, m := range members { + // have to cast here because of golang type-system--ugh! + expectedMembers = append(expectedMembers, etcd.Member(m)) + } + } else { + return nil, err } - } else { - return nil, err + sleepTime := (2 * time.Second) + if log.GetLevel() >= log.DebugLevel { + log.Debugf("Failed to resolve expected members; sleeping for %s", sleepTime) + } + time.Sleep(sleepTime) } - if log.GetLevel() >= log.DebugLevel { + + if len(expectedMembers) == 0 { + log.Fatal("Failed to determine expected members") + } else if log.GetLevel() >= log.DebugLevel { log.Debugf("Expected cluster members: %v#", expectedMembers) } @@ -160,12 +170,15 @@ func (d *Discovery) DiscoverEnvironment() (map[string]string, error) { } func initialClusterString(members []etcd.Member) string { - initialCluster := make([]string, 0, len(members)) - for _, m := range members { - member := fmt.Sprintf("%s=%s", m.Name, m.PeerURLs[0]) - initialCluster = append(initialCluster, member) + if len(members) > 0 { + initialCluster := make([]string, 0, len(members)) + for _, m := range members { + member := fmt.Sprintf("%s=%s", m.Name, m.PeerURLs[0]) + initialCluster = append(initialCluster, member) + } + return strings.Join(initialCluster, ",") } - return strings.Join(initialCluster, ",") + return "" } // Check for mismatched names between expected and current members with