From 36c5fd62654f87dd99d92e8e60cbf4cf1a276f6b Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Mon, 22 Jun 2015 11:57:20 -0700 Subject: [PATCH] etcdmain: fix the check in fallback-to-proxy case advertise-client-urls has to be set if listen-client-urls is set when fallbacking to proxy, which breaks the behavior. Loosen the check to fix it. --- etcdmain/config.go | 5 +++- etcdmain/config_test.go | 65 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/etcdmain/config.go b/etcdmain/config.go index 8069e637a..f3c28b66d 100644 --- a/etcdmain/config.go +++ b/etcdmain/config.go @@ -271,7 +271,10 @@ func (cfg *config) Parse(arguments []string) error { } // when etcd runs in member mode user needs to set -advertise-client-urls if -listen-client-urls is set. - if cfg.proxy.String() != proxyFlagOn { + // TODO(yichengq): check this for joining through discovery service case + mayFallbackToProxy := flags.IsSet(cfg.FlagSet, "discovery") && cfg.fallback.String() == fallbackFlagProxy + mayBeProxy := cfg.proxy.String() != proxyFlagOff || mayFallbackToProxy + if !mayBeProxy { if flags.IsSet(cfg.FlagSet, "listen-client-urls") && !flags.IsSet(cfg.FlagSet, "advertise-client-urls") { return errUnsetAdvertiseClientURLsFlag } diff --git a/etcdmain/config_test.go b/etcdmain/config_test.go index 090f412da..b2bb9cc4b 100644 --- a/etcdmain/config_test.go +++ b/etcdmain/config_test.go @@ -212,6 +212,71 @@ func TestConfigParsingConflictClusteringFlags(t *testing.T) { } } +func TestConfigParsingMissedAdvertiseClientURLsFlag(t *testing.T) { + tests := []struct { + args []string + werr error + }{ + { + []string{ + "-initial-cluster=infra1=http://127.0.0.1:2380", + "-listen-client-urls=http://127.0.0.1:2379", + }, + errUnsetAdvertiseClientURLsFlag, + }, + { + []string{ + "-discovery-srv=example.com", + "-listen-client-urls=http://127.0.0.1:2379", + }, + errUnsetAdvertiseClientURLsFlag, + }, + { + []string{ + "-discovery=http://example.com/abc", + "-discovery-fallback=exit", + "-listen-client-urls=http://127.0.0.1:2379", + }, + errUnsetAdvertiseClientURLsFlag, + }, + { + []string{ + "-listen-client-urls=http://127.0.0.1:2379", + }, + errUnsetAdvertiseClientURLsFlag, + }, + { + []string{ + "-discovery=http://example.com/abc", + "-listen-client-urls=http://127.0.0.1:2379", + }, + nil, + }, + { + []string{ + "-proxy=on", + "-listen-client-urls=http://127.0.0.1:2379", + }, + nil, + }, + { + []string{ + "-proxy=readonly", + "-listen-client-urls=http://127.0.0.1:2379", + }, + nil, + }, + } + + for i, tt := range tests { + cfg := NewConfig() + err := cfg.Parse(tt.args) + if err != tt.werr { + t.Errorf("%d: err = %v, want %v", i, err, tt.werr) + } + } +} + func TestConfigIsNewCluster(t *testing.T) { tests := []struct { state string