|
|
@@ -20,6 +20,7 @@ import (
|
|
|
"flag"
|
|
|
"fmt"
|
|
|
"log"
|
|
|
+ "net"
|
|
|
"net/http"
|
|
|
"os"
|
|
|
"strings"
|
|
|
@@ -172,42 +173,22 @@ func startEtcd() {
|
|
|
if err != nil {
|
|
|
log.Fatal(err.Error())
|
|
|
}
|
|
|
- cfg := &etcdserver.ServerConfig{
|
|
|
- Name: *name,
|
|
|
- ClientURLs: acurls,
|
|
|
- DataDir: *dir,
|
|
|
- SnapCount: *snapCount,
|
|
|
- Cluster: cls,
|
|
|
- DiscoveryURL: *durl,
|
|
|
- ClusterState: *clusterState,
|
|
|
- Transport: pt,
|
|
|
- }
|
|
|
- s := etcdserver.NewServer(cfg)
|
|
|
- s.Start()
|
|
|
-
|
|
|
- ch := &cors.CORSHandler{
|
|
|
- Handler: etcdhttp.NewClientHandler(s),
|
|
|
- Info: corsInfo,
|
|
|
- }
|
|
|
- ph := etcdhttp.NewPeerHandler(s)
|
|
|
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
- // 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.Print("etcd: listening for peers on ", urlStr)
|
|
|
+ plns = append(plns, l)
|
|
|
}
|
|
|
|
|
|
lcurls, err := flags.URLsFromFlags(fs, "listen-client-urls", "bind-addr", clientTLSInfo)
|
|
|
@@ -215,7 +196,7 @@ func startEtcd() {
|
|
|
log.Fatal(err.Error())
|
|
|
}
|
|
|
|
|
|
- // Start a client server goroutine for each listen address
|
|
|
+ clns := make([]net.Listener, 0)
|
|
|
for _, u := range lcurls {
|
|
|
l, err := transport.NewListener(u.Host, clientTLSInfo)
|
|
|
if err != nil {
|
|
|
@@ -223,10 +204,39 @@ func startEtcd() {
|
|
|
}
|
|
|
|
|
|
urlStr := u.String()
|
|
|
- go func() {
|
|
|
- log.Print("etcd: listening for client requests on ", urlStr)
|
|
|
+ log.Print("etcd: listening for client requests on ", urlStr)
|
|
|
+ clns = append(clns, l)
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg := &etcdserver.ServerConfig{
|
|
|
+ Name: *name,
|
|
|
+ ClientURLs: acurls,
|
|
|
+ DataDir: *dir,
|
|
|
+ SnapCount: *snapCount,
|
|
|
+ Cluster: cls,
|
|
|
+ DiscoveryURL: *durl,
|
|
|
+ ClusterState: *clusterState,
|
|
|
+ Transport: pt,
|
|
|
+ }
|
|
|
+ s := etcdserver.NewServer(cfg)
|
|
|
+ s.Start()
|
|
|
+
|
|
|
+ ch := &cors.CORSHandler{
|
|
|
+ Handler: etcdhttp.NewClientHandler(s),
|
|
|
+ Info: corsInfo,
|
|
|
+ }
|
|
|
+ ph := etcdhttp.NewPeerHandler(s)
|
|
|
+ // Start the peer server in a goroutine
|
|
|
+ for _, l := range plns {
|
|
|
+ go func(l net.Listener) {
|
|
|
+ log.Fatal(http.Serve(l, ph))
|
|
|
+ }(l)
|
|
|
+ }
|
|
|
+ // Start a client server goroutine for each listen address
|
|
|
+ for _, l := range clns {
|
|
|
+ go func(l net.Listener) {
|
|
|
log.Fatal(http.Serve(l, ch))
|
|
|
- }()
|
|
|
+ }(l)
|
|
|
}
|
|
|
}
|
|
|
|