Browse Source

etcd: attach default scheme to the peer-list if scheme is not given

Xiang Li 11 years ago
parent
commit
c1c2aeffab
2 changed files with 37 additions and 1 deletions
  1. 11 1
      etcd/etcd.go
  2. 26 0
      etcd/etcd_functional_test.go

+ 11 - 1
etcd/etcd.go

@@ -166,7 +166,17 @@ func (s *Server) Run() error {
 		}
 		log.Printf("id=%x server.run source=-discovery seeds=\"%v\"\n", s.id, seeds)
 	} else {
-		seeds = s.cfg.Peers
+		for _, p := range s.cfg.Peers {
+			u, err := url.Parse(p)
+			if err != nil {
+				log.Printf("id=%x server.run err=%q", err)
+				continue
+			}
+			if u.Scheme == "" {
+				u.Scheme = s.cfg.PeerTLSInfo().Scheme()
+			}
+			seeds = append(seeds, u.String())
+		}
 		log.Printf("id=%x server.run source=-peers seeds=\"%v\"\n", s.id, seeds)
 	}
 	s.peerHub.setSeeds(seeds)

+ 26 - 0
etcd/etcd_functional_test.go

@@ -18,6 +18,7 @@ package etcd
 
 import (
 	"math/rand"
+	"net/url"
 	"reflect"
 	"testing"
 	"time"
@@ -103,6 +104,31 @@ func TestJoinThroughFollower(t *testing.T) {
 	}
 }
 
+func TestJoinWithoutHTTPScheme(t *testing.T) {
+	bt := &testServer{}
+	bt.Start()
+
+	cl := testCluster{nodes: []*testServer{bt}}
+	seed := bt.URL
+	u, err := url.Parse(seed)
+	if err != nil {
+		t.Fatal(err)
+	}
+	// remove HTTP scheme
+	seed = u.Host + u.Path
+
+	for i := 1; i < 3; i++ {
+		c := newTestConfig()
+		c.Peers = []string{seed}
+		ts := &testServer{Config: c, Id: int64(i)}
+		ts.Start()
+		ts.WaitMode(participantMode)
+		cl.nodes = append(cl.nodes, ts)
+		cl.Leader()
+	}
+	cl.Destroy()
+}
+
 func TestClusterConfigReload(t *testing.T) {
 	defer afterTest(t)