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 return err
} }
tr, err := transport.NewTransport(cfg.peerTLSInfo)
if err != nil {
return err
}
// TODO(jonboulle): update peerURLs dynamically (i.e. when updating // TODO(jonboulle): update peerURLs dynamically (i.e. when updating
// clientURLs) instead of just using the initial fixed list here // clientURLs) instead of just using the initial fixed list here
peerURLs := cls.PeerURLs() peerURLs := cls.PeerURLs()
uf := func() []string { uf := func() []string {
cls, err := etcdserver.GetClusterFromPeers(peerURLs) cls, err := etcdserver.GetClusterFromPeers(peerURLs, tr)
if err != nil { if err != nil {
log.Printf("proxy: %v", err) log.Printf("proxy: %v", err)
return []string{} return []string{}

View File

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