From 916106c3a2c393c613f5a5bceaeab872732fdfc6 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Thu, 17 Dec 2015 18:54:48 -0800 Subject: [PATCH] client: support reset Endpoints. ResetEndpoints is useful when the there is a scheduled cluster changes or when manually manage the cluster without auto-sync enabled. --- client/client.go | 11 ++++++++--- client/client_test.go | 16 ++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/client/client.go b/client/client.go index ece4cc0cd..31ea7b315 100644 --- a/client/client.go +++ b/client/client.go @@ -162,6 +162,11 @@ type Client interface { // this may differ from the initial Endpoints provided in the Config. Endpoints() []string + // SetEndpoints sets the set of API endpoints used by Client to resolve + // HTTP requests. If the given endpoints are not valid, an error will be + // returned + SetEndpoints(eps []string) error + httpClient } @@ -176,7 +181,7 @@ func New(cfg Config) (Client, error) { password: cfg.Password, } } - if err := c.reset(cfg.Endpoints); err != nil { + if err := c.SetEndpoints(cfg.Endpoints); err != nil { return nil, err } return c, nil @@ -219,7 +224,7 @@ type httpClusterClient struct { rand *rand.Rand } -func (c *httpClusterClient) reset(eps []string) error { +func (c *httpClusterClient) SetEndpoints(eps []string) error { if len(eps) == 0 { return ErrNoEndpoints } @@ -341,7 +346,7 @@ func (c *httpClusterClient) Sync(ctx context.Context) error { return nil } - return c.reset(eps) + return c.SetEndpoints(eps) } func (c *httpClusterClient) AutoSync(ctx context.Context, interval time.Duration) error { diff --git a/client/client_test.go b/client/client_test.go index be526b17b..74437d690 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -705,7 +705,7 @@ func TestHTTPClusterClientSync(t *testing.T) { clientFactory: cf, rand: rand.New(rand.NewSource(0)), } - err := hc.reset([]string{"http://127.0.0.1:2379"}) + err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"}) if err != nil { t.Fatalf("unexpected error during setup: %#v", err) } @@ -728,7 +728,7 @@ func TestHTTPClusterClientSync(t *testing.T) { t.Fatalf("incorrect endpoints post-Sync: want=%#v got=%#v", want, got) } - err = hc.reset([]string{"http://127.0.0.1:4009"}) + err = hc.SetEndpoints([]string{"http://127.0.0.1:4009"}) if err != nil { t.Fatalf("unexpected error during reset: %#v", err) } @@ -749,7 +749,7 @@ func TestHTTPClusterClientSyncFail(t *testing.T) { clientFactory: cf, rand: rand.New(rand.NewSource(0)), } - err := hc.reset([]string{"http://127.0.0.1:2379"}) + err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"}) if err != nil { t.Fatalf("unexpected error during setup: %#v", err) } @@ -783,7 +783,7 @@ func TestHTTPClusterClientAutoSyncCancelContext(t *testing.T) { clientFactory: cf, rand: rand.New(rand.NewSource(0)), } - err := hc.reset([]string{"http://127.0.0.1:2379"}) + err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"}) if err != nil { t.Fatalf("unexpected error during setup: %#v", err) } @@ -805,7 +805,7 @@ func TestHTTPClusterClientAutoSyncFail(t *testing.T) { clientFactory: cf, rand: rand.New(rand.NewSource(0)), } - err := hc.reset([]string{"http://127.0.0.1:2379"}) + err := hc.SetEndpoints([]string{"http://127.0.0.1:2379"}) if err != nil { t.Fatalf("unexpected error during setup: %#v", err) } @@ -838,7 +838,7 @@ func TestHTTPClusterClientSyncPinEndpoint(t *testing.T) { clientFactory: cf, rand: rand.New(rand.NewSource(0)), } - err := hc.reset([]string{"http://127.0.0.1:4003", "http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002"}) + err := hc.SetEndpoints([]string{"http://127.0.0.1:4003", "http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002"}) if err != nil { t.Fatalf("unexpected error during setup: %#v", err) } @@ -867,7 +867,7 @@ func TestHTTPClusterClientResetFail(t *testing.T) { for i, tt := range tests { hc := &httpClusterClient{rand: rand.New(rand.NewSource(0))} - err := hc.reset(tt) + err := hc.SetEndpoints(tt) if err == nil { t.Errorf("#%d: expected non-nil error", i) } @@ -879,7 +879,7 @@ func TestHTTPClusterClientResetPinRandom(t *testing.T) { pinNum := 0 for i := 0; i < round; i++ { hc := &httpClusterClient{rand: rand.New(rand.NewSource(int64(i)))} - err := hc.reset([]string{"http://127.0.0.1:4001", "http://127.0.0.1:4002", "http://127.0.0.1:4003"}) + err := hc.SetEndpoints([]string{"http://127.0.0.1:4001", "http://127.0.0.1:4002", "http://127.0.0.1:4003"}) if err != nil { t.Fatalf("#%d: reset error (%v)", i, err) }