From a47e661fffa9e12c74ca2ab46e047b61b618b1dd Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 29 Jul 2015 23:04:12 +0800 Subject: [PATCH] discovery: print out detailed cluster error --- client/cluster_error.go | 10 ++++++++++ discovery/discovery.go | 11 +++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/client/cluster_error.go b/client/cluster_error.go index 1a7dfdd46..957ed4624 100644 --- a/client/cluster_error.go +++ b/client/cluster_error.go @@ -14,6 +14,8 @@ package client +import "fmt" + type ClusterError struct { Errors []error } @@ -21,3 +23,11 @@ type ClusterError struct { func (ce *ClusterError) Error() string { return ErrClusterUnavailable.Error() } + +func (ce *ClusterError) Detail() string { + s := "" + for i, e := range ce.Errors { + s += fmt.Sprintf("error #%d: %s\n", i, e) + } + return s +} diff --git a/discovery/discovery.go b/discovery/discovery.go index 2e7c38766..0ad3d0c18 100644 --- a/discovery/discovery.go +++ b/discovery/discovery.go @@ -221,7 +221,8 @@ func (d *discovery) checkCluster() ([]*client.Node, int, uint64, error) { if err == client.ErrInvalidJSON { return nil, 0, 0, ErrBadDiscoveryEndpoint } - if _, ok := err.(*client.ClusterError); ok { + if ce, ok := err.(*client.ClusterError); ok { + plog.Error(ce.Detail()) return d.checkClusterRetry() } return nil, 0, 0, err @@ -235,7 +236,8 @@ func (d *discovery) checkCluster() ([]*client.Node, int, uint64, error) { resp, err = d.c.Get(ctx, d.cluster, nil) cancel() if err != nil { - if _, ok := err.(*client.ClusterError); ok { + if ce, ok := err.(*client.ClusterError); ok { + plog.Error(ce.Detail()) return d.checkClusterRetry() } return nil, 0, 0, err @@ -266,7 +268,7 @@ func (d *discovery) checkCluster() ([]*client.Node, int, uint64, error) { func (d *discovery) logAndBackoffForRetry(step string) { d.retries++ retryTime := time.Second * (0x1 << d.retries) - plog.Infof("%s: connection to %s timed out, retrying in %s", step, d.url, retryTime) + plog.Infof("%s: error connecting to %s, retrying in %s", step, d.url, retryTime) d.clock.Sleep(retryTime) } @@ -311,7 +313,8 @@ func (d *discovery) waitNodes(nodes []*client.Node, size int, index uint64) ([]* plog.Noticef("found %d peer(s), waiting for %d more", len(all), size-len(all)) resp, err := w.Next(context.Background()) if err != nil { - if _, ok := err.(*client.ClusterError); ok { + if ce, ok := err.(*client.ClusterError); ok { + plog.Error(ce.Detail()) return d.waitNodesRetry() } return nil, err