mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #1372 from jonboulle/proxy
main: fix proxy initialization and setupCluster
This commit is contained in:
commit
d1d12abfd7
@ -71,7 +71,11 @@ func NewClusterFromString(name string, cluster string) (*Cluster, error) {
|
|||||||
if len(urls) == 0 || urls[0] == "" {
|
if len(urls) == 0 || urls[0] == "" {
|
||||||
return nil, fmt.Errorf("Empty URL given for %q", name)
|
return nil, fmt.Errorf("Empty URL given for %q", name)
|
||||||
}
|
}
|
||||||
m := NewMember(name, types.URLs(*flags.NewURLsValue(strings.Join(urls, ","))), c.name, nil)
|
purls := &flags.URLsValue{}
|
||||||
|
if err := purls.Set(strings.Join(urls, ",")); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
m := NewMember(name, types.URLs(*purls), c.name, nil)
|
||||||
if _, ok := c.members[m.ID]; ok {
|
if _, ok := c.members[m.ID]; ok {
|
||||||
return nil, fmt.Errorf("Member exists with identical ID %v", m)
|
return nil, fmt.Errorf("Member exists with identical ID %v", m)
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,8 @@ func TestClusterFromStringBad(t *testing.T) {
|
|||||||
// no URL defined for member
|
// no URL defined for member
|
||||||
"mem1=,mem2=http://128.193.4.20:2379,mem3=http://10.0.0.2:2379",
|
"mem1=,mem2=http://128.193.4.20:2379,mem3=http://10.0.0.2:2379",
|
||||||
"mem1,mem2=http://128.193.4.20:2379,mem3=http://10.0.0.2:2379",
|
"mem1,mem2=http://128.193.4.20:2379,mem3=http://10.0.0.2:2379",
|
||||||
|
// bad URL for member
|
||||||
|
"default=http://localhost/",
|
||||||
// TODO(philips): anyone know of a 64 bit sha1 hash collision
|
// TODO(philips): anyone know of a 64 bit sha1 hash collision
|
||||||
// "06b2f82fd81b2c20=http://128.193.4.20:2379,02c60cb75083ceef=http://128.193.4.20:2379",
|
// "06b2f82fd81b2c20=http://128.193.4.20:2379,02c60cb75083ceef=http://128.193.4.20:2379",
|
||||||
// the same url for two members
|
// the same url for two members
|
||||||
|
29
main.go
29
main.go
@ -50,7 +50,6 @@ var (
|
|||||||
|
|
||||||
initialCluster = fs.String("initial-cluster", "default=http://localhost:2380,default=http://localhost:7001", "Initial cluster configuration for bootstrapping")
|
initialCluster = fs.String("initial-cluster", "default=http://localhost:2380,default=http://localhost:7001", "Initial cluster configuration for bootstrapping")
|
||||||
initialClusterName = fs.String("initial-cluster-name", "etcd", "Initial name for the etcd cluster during bootstrap")
|
initialClusterName = fs.String("initial-cluster-name", "etcd", "Initial name for the etcd cluster during bootstrap")
|
||||||
cluster = &etcdserver.Cluster{}
|
|
||||||
clusterState = new(etcdserver.ClusterState)
|
clusterState = new(etcdserver.ClusterState)
|
||||||
|
|
||||||
cors = &pkg.CORSInfo{}
|
cors = &pkg.CORSInfo{}
|
||||||
@ -142,8 +141,9 @@ func main() {
|
|||||||
|
|
||||||
// startEtcd launches the etcd server and HTTP handlers for client/server communication.
|
// startEtcd launches the etcd server and HTTP handlers for client/server communication.
|
||||||
func startEtcd() {
|
func startEtcd() {
|
||||||
if err := setupCluster(); err != nil {
|
cls, err := setupCluster()
|
||||||
log.Fatalf("etcd: setupCluster returned error %v", err)
|
if err != nil {
|
||||||
|
log.Fatalf("etcd: error setting up initial cluster: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if *dir == "" {
|
if *dir == "" {
|
||||||
@ -168,7 +168,7 @@ func startEtcd() {
|
|||||||
ClientURLs: acurls,
|
ClientURLs: acurls,
|
||||||
DataDir: *dir,
|
DataDir: *dir,
|
||||||
SnapCount: *snapCount,
|
SnapCount: *snapCount,
|
||||||
Cluster: cluster,
|
Cluster: cls,
|
||||||
DiscoveryURL: *durl,
|
DiscoveryURL: *durl,
|
||||||
ClusterState: *clusterState,
|
ClusterState: *clusterState,
|
||||||
Transport: pt,
|
Transport: pt,
|
||||||
@ -223,12 +223,17 @@ func startEtcd() {
|
|||||||
|
|
||||||
// startProxy launches an HTTP proxy for client communication which proxies to other etcd nodes.
|
// startProxy launches an HTTP proxy for client communication which proxies to other etcd nodes.
|
||||||
func startProxy() {
|
func startProxy() {
|
||||||
|
cls, err := setupCluster()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("etcd: error setting up initial cluster: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
pt, err := transport.NewTransport(clientTLSInfo)
|
pt, err := transport.NewTransport(clientTLSInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ph, err := proxy.NewHandler(pt, (*cluster).PeerURLs())
|
ph, err := proxy.NewHandler(pt, cls.PeerURLs())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -262,32 +267,32 @@ func startProxy() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// setupCluster sets up the cluster definition for bootstrap or discovery.
|
// setupCluster sets up the cluster definition for bootstrap or discovery.
|
||||||
func setupCluster() error {
|
func setupCluster() (*etcdserver.Cluster, error) {
|
||||||
set := make(map[string]bool)
|
set := make(map[string]bool)
|
||||||
fs.Visit(func(f *flag.Flag) {
|
fs.Visit(func(f *flag.Flag) {
|
||||||
set[f.Name] = true
|
set[f.Name] = true
|
||||||
})
|
})
|
||||||
if set["discovery"] && set["initial-cluster"] {
|
if set["discovery"] && set["initial-cluster"] {
|
||||||
return fmt.Errorf("both discovery and bootstrap-config are set")
|
return nil, fmt.Errorf("both discovery and bootstrap-config are set")
|
||||||
}
|
}
|
||||||
apurls, err := pkg.URLsFromFlags(fs, "advertise-peer-urls", "addr", peerTLSInfo)
|
apurls, err := pkg.URLsFromFlags(fs, "advertise-peer-urls", "addr", peerTLSInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = nil
|
var cls *etcdserver.Cluster
|
||||||
switch {
|
switch {
|
||||||
case set["discovery"]:
|
case set["discovery"]:
|
||||||
clusterStr := genClusterString(*name, apurls)
|
clusterStr := genClusterString(*name, apurls)
|
||||||
cluster, err = etcdserver.NewClusterFromString(*durl, clusterStr)
|
cls, err = etcdserver.NewClusterFromString(*durl, clusterStr)
|
||||||
case set["initial-cluster"]:
|
case set["initial-cluster"]:
|
||||||
fallthrough
|
fallthrough
|
||||||
default:
|
default:
|
||||||
// We're statically configured, and cluster has appropriately been set.
|
// We're statically configured, and cluster has appropriately been set.
|
||||||
// Try to configure by indexing the static cluster by name.
|
// Try to configure by indexing the static cluster by name.
|
||||||
cluster, err = etcdserver.NewClusterFromString(*initialClusterName, *initialCluster)
|
cls, err = etcdserver.NewClusterFromString(*initialClusterName, *initialCluster)
|
||||||
}
|
}
|
||||||
return err
|
return cls, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func genClusterString(name string, urls types.URLs) string {
|
func genClusterString(name string, urls types.URLs) string {
|
||||||
|
@ -28,6 +28,10 @@ func TestGenClusterString(t *testing.T) {
|
|||||||
urls []string
|
urls []string
|
||||||
wstr string
|
wstr string
|
||||||
}{
|
}{
|
||||||
|
{
|
||||||
|
"default", []string{"http://127.0.0.1:4001"},
|
||||||
|
"default=http://127.0.0.1:4001",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"node1", []string{"http://0.0.0.0:2379", "http://1.1.1.1:2379"},
|
"node1", []string{"http://0.0.0.0:2379", "http://1.1.1.1:2379"},
|
||||||
"node1=http://0.0.0.0:2379,node1=http://1.1.1.1:2379",
|
"node1=http://0.0.0.0:2379,node1=http://1.1.1.1:2379",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user