Browse Source

Merge pull request #3590 from yichengq/discovery-log

etcdmain: improve log when join discovery fails
Yicheng Qin 10 years ago
parent
commit
49d262185d
3 changed files with 22 additions and 1 deletions
  1. 6 0
      etcdmain/etcd.go
  2. 15 0
      etcdserver/errors.go
  3. 1 1
      etcdserver/server.go

+ 6 - 0
etcdmain/etcd.go

@@ -159,6 +159,12 @@ func Main() {
 				}
 				os.Exit(1)
 			}
+			if etcdserver.IsDiscoveryError(err) {
+				plog.Errorf("%v", err)
+				plog.Infof("discovery token %s was used, but failed to bootstrap the cluster.", cfg.durl)
+				plog.Infof("please generate a new discovery token and try to bootstrap again.")
+				os.Exit(1)
+			}
 			plog.Fatalf("%v", err)
 		}
 		os.Exit(1)

+ 15 - 0
etcdserver/errors.go

@@ -16,6 +16,7 @@ package etcdserver
 
 import (
 	"errors"
+	"fmt"
 
 	etcdErr "github.com/coreos/etcd/error"
 )
@@ -38,3 +39,17 @@ func isKeyNotFound(err error) bool {
 	e, ok := err.(*etcdErr.Error)
 	return ok && e.ErrorCode == etcdErr.EcodeKeyNotFound
 }
+
+type discoveryError struct {
+	op  string
+	err error
+}
+
+func (e discoveryError) Error() string {
+	return fmt.Sprintf("failed to %s discovery cluster (%v)", e.op, e.err)
+}
+
+func IsDiscoveryError(err error) bool {
+	_, ok := err.(*discoveryError)
+	return ok
+}

+ 1 - 1
etcdserver/server.go

@@ -247,7 +247,7 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
 			var err error
 			str, err = discovery.JoinCluster(cfg.DiscoveryURL, cfg.DiscoveryProxy, m.ID, cfg.InitialPeerURLsMap.String())
 			if err != nil {
-				return nil, err
+				return nil, &discoveryError{op: "join", err: err}
 			}
 			urlsmap, err := types.NewURLsMap(str)
 			if err != nil {