mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
discovery: print out detailed cluster error
Conflicts: discovery/discovery.go
This commit is contained in:
parent
97605046c1
commit
3a346eac25
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
package client
|
package client
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
type ClusterError struct {
|
type ClusterError struct {
|
||||||
Errors []error
|
Errors []error
|
||||||
}
|
}
|
||||||
@ -21,3 +23,11 @@ type ClusterError struct {
|
|||||||
func (ce *ClusterError) Error() string {
|
func (ce *ClusterError) Error() string {
|
||||||
return ErrClusterUnavailable.Error()
|
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
|
||||||
|
}
|
||||||
|
@ -216,7 +216,8 @@ func (d *discovery) checkCluster() ([]*client.Node, int, uint64, error) {
|
|||||||
if eerr, ok := err.(*client.Error); ok && eerr.Code == client.ErrorCodeKeyNotFound {
|
if eerr, ok := err.(*client.Error); ok && eerr.Code == client.ErrorCodeKeyNotFound {
|
||||||
return nil, 0, 0, ErrSizeNotFound
|
return nil, 0, 0, ErrSizeNotFound
|
||||||
}
|
}
|
||||||
if _, ok := err.(*client.ClusterError); ok {
|
if ce, ok := err.(*client.ClusterError); ok {
|
||||||
|
plog.Error(ce.Detail())
|
||||||
return d.checkClusterRetry()
|
return d.checkClusterRetry()
|
||||||
}
|
}
|
||||||
return nil, 0, 0, err
|
return nil, 0, 0, err
|
||||||
@ -230,7 +231,8 @@ func (d *discovery) checkCluster() ([]*client.Node, int, uint64, error) {
|
|||||||
resp, err = d.c.Get(ctx, d.cluster, nil)
|
resp, err = d.c.Get(ctx, d.cluster, nil)
|
||||||
cancel()
|
cancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(*client.ClusterError); ok {
|
if ce, ok := err.(*client.ClusterError); ok {
|
||||||
|
plog.Error(ce.Detail())
|
||||||
return d.checkClusterRetry()
|
return d.checkClusterRetry()
|
||||||
}
|
}
|
||||||
return nil, 0, 0, err
|
return nil, 0, 0, err
|
||||||
@ -261,7 +263,7 @@ func (d *discovery) checkCluster() ([]*client.Node, int, uint64, error) {
|
|||||||
func (d *discovery) logAndBackoffForRetry(step string) {
|
func (d *discovery) logAndBackoffForRetry(step string) {
|
||||||
d.retries++
|
d.retries++
|
||||||
retryTime := time.Second * (0x1 << 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)
|
d.clock.Sleep(retryTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,7 +308,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))
|
plog.Noticef("found %d peer(s), waiting for %d more", len(all), size-len(all))
|
||||||
resp, err := w.Next(context.Background())
|
resp, err := w.Next(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(*client.ClusterError); ok {
|
if ce, ok := err.(*client.ClusterError); ok {
|
||||||
|
plog.Error(ce.Detail())
|
||||||
return d.waitNodesRetry()
|
return d.waitNodesRetry()
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
x
Reference in New Issue
Block a user