etcdserver: try to listen on ports before initializing etcd server

release-2.0
Xiang Li 2014-11-03 15:17:21 -08:00
parent dbdeceda7b
commit dd09042632
1 changed files with 43 additions and 33 deletions

View File

@ -20,6 +20,7 @@ import (
"flag" "flag"
"fmt" "fmt"
"log" "log"
"net"
"net/http" "net/http"
"os" "os"
"strings" "strings"
@ -172,6 +173,41 @@ func startEtcd() {
if err != nil { if err != nil {
log.Fatal(err.Error()) log.Fatal(err.Error())
} }
lpurls, err := flags.URLsFromFlags(fs, "listen-peer-urls", "peer-bind-addr", peerTLSInfo)
if err != nil {
log.Fatal(err.Error())
}
plns := make([]net.Listener, 0)
for _, u := range lpurls {
l, err := transport.NewListener(u.Host, peerTLSInfo)
if err != nil {
log.Fatal(err)
}
urlStr := u.String()
log.Print("etcd: listening for peers on ", urlStr)
plns = append(plns, l)
}
lcurls, err := flags.URLsFromFlags(fs, "listen-client-urls", "bind-addr", clientTLSInfo)
if err != nil {
log.Fatal(err.Error())
}
clns := make([]net.Listener, 0)
for _, u := range lcurls {
l, err := transport.NewListener(u.Host, clientTLSInfo)
if err != nil {
log.Fatal(err)
}
urlStr := u.String()
log.Print("etcd: listening for client requests on ", urlStr)
clns = append(clns, l)
}
cfg := &etcdserver.ServerConfig{ cfg := &etcdserver.ServerConfig{
Name: *name, Name: *name,
ClientURLs: acurls, ClientURLs: acurls,
@ -190,43 +226,17 @@ func startEtcd() {
Info: corsInfo, Info: corsInfo,
} }
ph := etcdhttp.NewPeerHandler(s) ph := etcdhttp.NewPeerHandler(s)
// Start the peer server in a goroutine
lpurls, err := flags.URLsFromFlags(fs, "listen-peer-urls", "peer-bind-addr", peerTLSInfo) for _, l := range plns {
if err != nil { go func(l net.Listener) {
log.Fatal(err.Error())
}
for _, u := range lpurls {
l, err := transport.NewListener(u.Host, peerTLSInfo)
if err != nil {
log.Fatal(err)
}
// Start the peer server in a goroutine
urlStr := u.String()
go func() {
log.Print("etcd: listening for peers on ", urlStr)
log.Fatal(http.Serve(l, ph)) log.Fatal(http.Serve(l, ph))
}() }(l)
} }
lcurls, err := flags.URLsFromFlags(fs, "listen-client-urls", "bind-addr", clientTLSInfo)
if err != nil {
log.Fatal(err.Error())
}
// Start a client server goroutine for each listen address // Start a client server goroutine for each listen address
for _, u := range lcurls { for _, l := range clns {
l, err := transport.NewListener(u.Host, clientTLSInfo) go func(l net.Listener) {
if err != nil {
log.Fatal(err)
}
urlStr := u.String()
go func() {
log.Print("etcd: listening for client requests on ", urlStr)
log.Fatal(http.Serve(l, ch)) log.Fatal(http.Serve(l, ch))
}() }(l)
} }
} }