From f9b7fccf1bc76915b8c663ed8a1da57f384e7df1 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Tue, 23 Jan 2018 15:30:31 -0800 Subject: [PATCH] etcdserver: add error details on DNS resolution failure on advertise URLs Signed-off-by: Gyuho Lee --- etcdserver/config.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/etcdserver/config.go b/etcdserver/config.go index 249e8d5fc..056af745d 100644 --- a/etcdserver/config.go +++ b/etcdserver/config.go @@ -124,7 +124,8 @@ func (c *ServerConfig) advertiseMatchesCluster() error { sort.Strings(apurls) ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() - if netutil.URLStringsEqual(ctx, apurls, urls.StringSlice()) { + ok, err := netutil.URLStringsEqual(ctx, apurls, urls.StringSlice()) + if ok { return nil } @@ -148,7 +149,7 @@ func (c *ServerConfig) advertiseMatchesCluster() error { } mstr := strings.Join(missing, ",") apStr := strings.Join(apurls, ",") - return fmt.Errorf("--initial-cluster has %s but missing from --initial-advertise-peer-urls=%s ", mstr, apStr) + return fmt.Errorf("--initial-cluster has %s but missing from --initial-advertise-peer-urls=%s (%v)", mstr, apStr, err) } for url := range apMap { @@ -156,9 +157,16 @@ func (c *ServerConfig) advertiseMatchesCluster() error { missing = append(missing, url) } } - mstr := strings.Join(missing, ",") + if len(missing) > 0 { + mstr := strings.Join(missing, ",") + umap := types.URLsMap(map[string]types.URLs{c.Name: c.PeerURLs}) + return fmt.Errorf("--initial-advertise-peer-urls has %s but missing from --initial-cluster=%s", mstr, umap.String()) + } + + // resolved URLs from "--initial-advertise-peer-urls" and "--initial-cluster" did not match or failed + apStr := strings.Join(apurls, ",") umap := types.URLsMap(map[string]types.URLs{c.Name: c.PeerURLs}) - return fmt.Errorf("--initial-advertise-peer-urls has %s but missing from --initial-cluster=%s", mstr, umap.String()) + return fmt.Errorf("failed to resolve %s to match --initial-cluster=%s (%v)", apStr, umap.String(), err) } func (c *ServerConfig) MemberDir() string { return filepath.Join(c.DataDir, "member") }