From f0760d6246dd50f22beb3258aad40c15d95a024b Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Fri, 31 Oct 2014 13:59:25 -0700 Subject: [PATCH] client: elevate context to caller of MembersAPI --- client/client.go | 6 +++--- client/members.go | 27 +++++++++------------------ etcdctl/command/member_commands.go | 25 +++++++++++++++++++------ 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/client/client.go b/client/client.go index b9e4c9dbe..691f59d3c 100644 --- a/client/client.go +++ b/client/client.go @@ -75,9 +75,9 @@ func (c *httpClusterClient) Do(ctx context.Context, act HTTPAction) (*http.Respo return c.endpoints[0].Do(ctx, act) } -func (c *httpClusterClient) Sync() error { - mAPI := NewMembersAPI(c, DefaultRequestTimeout) - ms, err := mAPI.List() +func (c *httpClusterClient) Sync(ctx context.Context) error { + mAPI := NewMembersAPI(c) + ms, err := mAPI.List(ctx) if err != nil { return err } diff --git a/client/members.go b/client/members.go index 30c03ce74..539f255a2 100644 --- a/client/members.go +++ b/client/members.go @@ -23,7 +23,6 @@ import ( "net/http" "net/url" "path" - "time" "github.com/coreos/etcd/Godeps/_workspace/src/code.google.com/p/go.net/context" "github.com/coreos/etcd/etcdserver/etcdhttp/httptypes" @@ -34,29 +33,25 @@ var ( DefaultV2MembersPrefix = "/v2/members" ) -func NewMembersAPI(c httpActionDo, to time.Duration) MembersAPI { +func NewMembersAPI(c httpActionDo) MembersAPI { return &httpMembersAPI{ - client: c, - timeout: to, + client: c, } } type MembersAPI interface { - List() ([]httptypes.Member, error) - Add(peerURL string) (*httptypes.Member, error) - Remove(mID string) error + List(ctx context.Context) ([]httptypes.Member, error) + Add(ctx context.Context, peerURL string) (*httptypes.Member, error) + Remove(ctx context.Context, mID string) error } type httpMembersAPI struct { - client httpActionDo - timeout time.Duration + client httpActionDo } -func (m *httpMembersAPI) List() ([]httptypes.Member, error) { +func (m *httpMembersAPI) List(ctx context.Context) ([]httptypes.Member, error) { req := &membersAPIActionList{} - ctx, cancel := context.WithTimeout(context.Background(), m.timeout) resp, body, err := m.client.Do(ctx, req) - cancel() if err != nil { return nil, err } @@ -73,16 +68,14 @@ func (m *httpMembersAPI) List() ([]httptypes.Member, error) { return []httptypes.Member(mCollection), nil } -func (m *httpMembersAPI) Add(peerURL string) (*httptypes.Member, error) { +func (m *httpMembersAPI) Add(ctx context.Context, peerURL string) (*httptypes.Member, error) { urls, err := types.NewURLs([]string{peerURL}) if err != nil { return nil, err } req := &membersAPIActionAdd{peerURLs: urls} - ctx, cancel := context.WithTimeout(context.Background(), m.timeout) resp, body, err := m.client.Do(ctx, req) - cancel() if err != nil { return nil, err } @@ -99,11 +92,9 @@ func (m *httpMembersAPI) Add(peerURL string) (*httptypes.Member, error) { return &memb, nil } -func (m *httpMembersAPI) Remove(memberID string) error { +func (m *httpMembersAPI) Remove(ctx context.Context, memberID string) error { req := &membersAPIActionRemove{memberID: memberID} - ctx, cancel := context.WithTimeout(context.Background(), m.timeout) resp, _, err := m.client.Do(ctx, req) - cancel() if err != nil { return err } diff --git a/etcdctl/command/member_commands.go b/etcdctl/command/member_commands.go index 4a2cb41c4..143ae92ce 100644 --- a/etcdctl/command/member_commands.go +++ b/etcdctl/command/member_commands.go @@ -6,6 +6,7 @@ import ( "os" "strings" + "github.com/coreos/etcd/Godeps/_workspace/src/code.google.com/p/go.net/context" "github.com/coreos/etcd/Godeps/_workspace/src/github.com/codegangsta/cli" "github.com/coreos/etcd/client" ) @@ -49,13 +50,16 @@ func mustNewMembersAPI(c *cli.Context) client.MembersAPI { } if !c.GlobalBool("no-sync") { - if err := hc.Sync(); err != nil { + ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) + err := hc.Sync(ctx) + cancel() + if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } } - return client.NewMembersAPI(hc, client.DefaultRequestTimeout) + return client.NewMembersAPI(hc) } func actionMemberList(c *cli.Context) { @@ -64,7 +68,9 @@ func actionMemberList(c *cli.Context) { os.Exit(1) } mAPI := mustNewMembersAPI(c) - members, err := mAPI.List() + ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) + members, err := mAPI.List(ctx) + cancel() if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) @@ -85,7 +91,9 @@ func actionMemberAdd(c *cli.Context) { mAPI := mustNewMembersAPI(c) url := args[1] - m, err := mAPI.Add(url) + ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) + m, err := mAPI.Add(ctx, url) + cancel() if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) @@ -95,7 +103,9 @@ func actionMemberAdd(c *cli.Context) { newName := args[0] fmt.Printf("Added member named %s with ID %s to cluster\n", newName, newID) - members, err := mAPI.List() + ctx, cancel = context.WithTimeout(context.Background(), client.DefaultRequestTimeout) + members, err := mAPI.List(ctx) + cancel() if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) @@ -127,7 +137,10 @@ func actionMemberRemove(c *cli.Context) { mAPI := mustNewMembersAPI(c) mID := args[0] - if err := mAPI.Remove(mID); err != nil { + ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) + err := mAPI.Remove(ctx, mID) + cancel() + if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) }