etcdserver: User peerTLSInfo to get cluster member

This commit is contained in:
Shota Fukumori (sora_h) 2015-01-27 00:31:11 +09:00 committed by Shota Fukumori (sora_h)
parent 93e4880ae6
commit 033e7d1db9
2 changed files with 18 additions and 12 deletions

View File

@ -213,11 +213,16 @@ func startProxy(cfg *config) error {
return err
}
tr, err := transport.NewTransport(cfg.peerTLSInfo)
if err != nil {
return err
}
// TODO(jonboulle): update peerURLs dynamically (i.e. when updating
// clientURLs) instead of just using the initial fixed list here
peerURLs := cls.PeerURLs()
uf := func() []string {
cls, err := etcdserver.GetClusterFromPeers(peerURLs)
cls, err := etcdserver.GetClusterFromPeers(peerURLs, tr)
if err != nil {
log.Printf("proxy: %v", err)
return []string{}

View File

@ -159,7 +159,7 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
switch {
case !haveWAL && !cfg.NewCluster:
us := getOtherPeerURLs(cfg.Cluster, cfg.Name)
existingCluster, err := GetClusterFromPeers(us)
existingCluster, err := GetClusterFromPeers(us, cfg.Transport)
if err != nil {
return nil, fmt.Errorf("cannot fetch cluster info from peer urls: %v", err)
}
@ -175,7 +175,7 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
return nil, err
}
m := cfg.Cluster.MemberByName(cfg.Name)
if isBootstrapped(cfg.Cluster, cfg.Name) {
if isBootstrapped(cfg) {
return nil, fmt.Errorf("member %s has already been bootstrapped", m.ID)
}
if cfg.ShouldDiscover() {
@ -820,9 +820,12 @@ func (s *EtcdServer) ResumeSending() { s.r.resumeSending() }
// isBootstrapped tries to check if the given member has been bootstrapped
// in the given cluster.
func isBootstrapped(cl *Cluster, member string) bool {
func isBootstrapped(cfg *ServerConfig) bool {
cl := cfg.Cluster
member := cfg.Name
us := getOtherPeerURLs(cl, member)
rcl, err := getClusterFromPeers(us, false)
rcl, err := getClusterFromPeers(us, false, cfg.Transport)
if err != nil {
return false
}
@ -842,17 +845,15 @@ func isBootstrapped(cl *Cluster, member string) bool {
// these URLs. The first URL to provide a response is used. If no URLs provide
// a response, or a Cluster cannot be successfully created from a received
// response, an error is returned.
func GetClusterFromPeers(urls []string) (*Cluster, error) {
return getClusterFromPeers(urls, true)
func GetClusterFromPeers(urls []string, tr *http.Transport) (*Cluster, error) {
return getClusterFromPeers(urls, true, tr)
}
// If logerr is true, it prints out more error messages.
func getClusterFromPeers(urls []string, logerr bool) (*Cluster, error) {
func getClusterFromPeers(urls []string, logerr bool, tr *http.Transport) (*Cluster, error) {
cc := &http.Client{
Transport: &http.Transport{
ResponseHeaderTimeout: 500 * time.Millisecond,
},
Timeout: time.Second,
Transport: tr,
Timeout: time.Second,
}
for _, u := range urls {
resp, err := cc.Get(u + "/members")