mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
main: fix proxy initialization and setupCluster
This commit is contained in:
parent
d8258c38be
commit
d7301a5cf4
@ -71,7 +71,11 @@ func NewClusterFromString(name string, cluster string) (*Cluster, error) {
|
||||
if len(urls) == 0 || urls[0] == "" {
|
||||
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 {
|
||||
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
|
||||
"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
|
||||
// "06b2f82fd81b2c20=http://128.193.4.20:2379,02c60cb75083ceef=http://128.193.4.20:2379",
|
||||
// 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")
|
||||
initialClusterName = fs.String("initial-cluster-name", "etcd", "Initial name for the etcd cluster during bootstrap")
|
||||
cluster = &etcdserver.Cluster{}
|
||||
clusterState = new(etcdserver.ClusterState)
|
||||
|
||||
cors = &pkg.CORSInfo{}
|
||||
@ -142,8 +141,9 @@ func main() {
|
||||
|
||||
// startEtcd launches the etcd server and HTTP handlers for client/server communication.
|
||||
func startEtcd() {
|
||||
if err := setupCluster(); err != nil {
|
||||
log.Fatalf("etcd: setupCluster returned error %v", err)
|
||||
cls, err := setupCluster()
|
||||
if err != nil {
|
||||
log.Fatalf("etcd: error setting up initial cluster: %v", err)
|
||||
}
|
||||
|
||||
if *dir == "" {
|
||||
@ -168,7 +168,7 @@ func startEtcd() {
|
||||
ClientURLs: acurls,
|
||||
DataDir: *dir,
|
||||
SnapCount: *snapCount,
|
||||
Cluster: cluster,
|
||||
Cluster: cls,
|
||||
DiscoveryURL: *durl,
|
||||
ClusterState: *clusterState,
|
||||
Transport: pt,
|
||||
@ -223,12 +223,17 @@ func startEtcd() {
|
||||
|
||||
// startProxy launches an HTTP proxy for client communication which proxies to other etcd nodes.
|
||||
func startProxy() {
|
||||
cls, err := setupCluster()
|
||||
if err != nil {
|
||||
log.Fatalf("etcd: error setting up initial cluster: %v", err)
|
||||
}
|
||||
|
||||
pt, err := transport.NewTransport(clientTLSInfo)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
ph, err := proxy.NewHandler(pt, (*cluster).PeerURLs())
|
||||
ph, err := proxy.NewHandler(pt, cls.PeerURLs())
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@ -262,32 +267,32 @@ func startProxy() {
|
||||
}
|
||||
|
||||
// setupCluster sets up the cluster definition for bootstrap or discovery.
|
||||
func setupCluster() error {
|
||||
func setupCluster() (*etcdserver.Cluster, error) {
|
||||
set := make(map[string]bool)
|
||||
fs.Visit(func(f *flag.Flag) {
|
||||
set[f.Name] = true
|
||||
})
|
||||
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)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = nil
|
||||
var cls *etcdserver.Cluster
|
||||
switch {
|
||||
case set["discovery"]:
|
||||
clusterStr := genClusterString(*name, apurls)
|
||||
cluster, err = etcdserver.NewClusterFromString(*durl, clusterStr)
|
||||
cls, err = etcdserver.NewClusterFromString(*durl, clusterStr)
|
||||
case set["initial-cluster"]:
|
||||
fallthrough
|
||||
default:
|
||||
// We're statically configured, and cluster has appropriately been set.
|
||||
// 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 {
|
||||
|
@ -28,6 +28,10 @@ func TestGenClusterString(t *testing.T) {
|
||||
urls []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=http://0.0.0.0:2379,node1=http://1.1.1.1:2379",
|
||||
|
Loading…
x
Reference in New Issue
Block a user