Browse Source

etcdserver: do not get local version via HTTP

Xiang Li 10 years ago
parent
commit
9f8342dba4
2 changed files with 6 additions and 2 deletions
  1. 5 1
      etcdserver/cluster_util.go
  2. 1 1
      etcdserver/server.go

+ 5 - 1
etcdserver/cluster_util.go

@@ -113,10 +113,14 @@ func getRemotePeerURLs(cl Cluster, local string) []string {
 // The key of the returned map is the member's ID. The value of the returned map
 // is the semver versions string, including server and cluster.
 // If it fails to get the version of a member, the key will be nil.
-func getVersions(cl Cluster, tr *http.Transport) map[string]*version.Versions {
+func getVersions(cl Cluster, local types.ID, tr *http.Transport) map[string]*version.Versions {
 	members := cl.Members()
 	vers := make(map[string]*version.Versions)
 	for _, m := range members {
+		if m.ID == local {
+			vers[m.ID.String()] = &version.Versions{Server: version.Version, Cluster: cl.Version().String()}
+			continue
+		}
 		ver, err := getVersion(m, tr)
 		if err != nil {
 			log.Printf("etcdserver: cannot get the version of member %s (%v)", m.ID, err)

+ 1 - 1
etcdserver/server.go

@@ -942,7 +942,7 @@ func (s *EtcdServer) monitorVersions() {
 			continue
 		}
 
-		v := decideClusterVersion(getVersions(s.cluster, s.cfg.Transport))
+		v := decideClusterVersion(getVersions(s.cluster, s.id, s.cfg.Transport))
 		if v != nil {
 			// only keep major.minor version for comparasion
 			v = &semver.Version{