Browse Source

Merge pull request #7027 from gyuho/default-host

embed: only override default advertised client URL if the client listen URL is 0.0.0.0
Gyu-Ho Lee 9 years ago
parent
commit
d62ce55584
2 changed files with 19 additions and 6 deletions
  1. 18 0
      embed/config.go
  2. 1 6
      etcdmain/etcd.go

+ 18 - 0
embed/config.go

@@ -356,6 +356,24 @@ func (cfg Config) IsDefaultHost() (string, error) {
 	return "", defaultHostStatus
 	return "", defaultHostStatus
 }
 }
 
 
+// UpdateDefaultClusterFromName updates cluster advertise URLs with default host.
+// TODO: check whether fields are set instead of whether fields have default value
+func (cfg *Config) UpdateDefaultClusterFromName(defaultInitialCluster string) {
+	defaultHost, defaultHostErr := cfg.IsDefaultHost()
+	defaultHostOverride := defaultHost == "" || defaultHostErr == nil
+	if (defaultHostOverride || cfg.Name != DefaultName) && cfg.InitialCluster == defaultInitialCluster {
+		cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name)
+		ip, _, _ := net.SplitHostPort(cfg.LCUrls[0].Host)
+		// if client-listen-url is 0.0.0.0, just use detected default host
+		// otherwise, rewrite advertise-client-url with localhost
+		if ip != "0.0.0.0" {
+			_, acPort, _ := net.SplitHostPort(cfg.ACUrls[0].Host)
+			cfg.ACUrls[0] = url.URL{Scheme: cfg.ACUrls[0].Scheme, Host: fmt.Sprintf("localhost:%s", acPort)}
+			cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name)
+		}
+	}
+}
+
 // checkBindURLs returns an error if any URL uses a domain name.
 // checkBindURLs returns an error if any URL uses a domain name.
 // TODO: return error in 3.2.0
 // TODO: return error in 3.2.0
 func checkBindURLs(urls []url.URL) error {
 func checkBindURLs(urls []url.URL) error {

+ 1 - 6
etcdmain/etcd.go

@@ -84,12 +84,7 @@ func startEtcdOrProxyV2() {
 	GoMaxProcs := runtime.GOMAXPROCS(0)
 	GoMaxProcs := runtime.GOMAXPROCS(0)
 	plog.Infof("setting maximum number of CPUs to %d, total number of available CPUs is %d", GoMaxProcs, runtime.NumCPU())
 	plog.Infof("setting maximum number of CPUs to %d, total number of available CPUs is %d", GoMaxProcs, runtime.NumCPU())
 
 
-	// TODO: check whether fields are set instead of whether fields have default value
-	defaultHost, defaultHostErr := cfg.IsDefaultHost()
-	defaultHostOverride := defaultHost == "" || defaultHostErr == nil
-	if (defaultHostOverride || cfg.Name != embed.DefaultName) && cfg.InitialCluster == defaultInitialCluster {
-		cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name)
-	}
+	(&cfg.Config).UpdateDefaultClusterFromName(defaultInitialCluster)
 
 
 	if cfg.Dir == "" {
 	if cfg.Dir == "" {
 		cfg.Dir = fmt.Sprintf("%v.etcd", cfg.Name)
 		cfg.Dir = fmt.Sprintf("%v.etcd", cfg.Name)