From 9d07db44320a2bc08fc1469c770dd6c9a92bb3b5 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Thu, 30 Oct 2014 17:00:16 -0700 Subject: [PATCH] client: move timeout into caller of httpClient --- client/http.go | 6 ------ client/keys.go | 19 ++++++++++++------- client/members.go | 20 ++++++++++++++------ 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/client/http.go b/client/http.go index 625fc19ed..6fee346d5 100644 --- a/client/http.go +++ b/client/http.go @@ -53,12 +53,6 @@ type httpClient struct { timeout time.Duration } -func (c *httpClient) doWithTimeout(act httpAction) (int, []byte, error) { - ctx, cancel := context.WithTimeout(context.Background(), c.timeout) - defer cancel() - return c.do(ctx, act) -} - func (c *httpClient) do(ctx context.Context, act httpAction) (int, []byte, error) { req := act.httpRequest(c.endpoint) diff --git a/client/keys.go b/client/keys.go index 7d7daeb34..3ca55792b 100644 --- a/client/keys.go +++ b/client/keys.go @@ -58,12 +58,12 @@ func newHTTPKeysAPIWithPrefix(tr *http.Transport, ep string, to time.Duration, p c := &httpClient{ transport: tr, endpoint: *u, - timeout: to, } kAPI := httpKeysAPI{ - client: c, - prefix: prefix, + client: c, + prefix: prefix, + timeout: to, } return &kAPI, nil @@ -100,8 +100,9 @@ func (n *Node) String() string { } type httpKeysAPI struct { - client *httpClient - prefix string + client *httpClient + prefix string + timeout time.Duration } func (k *httpKeysAPI) Create(key, val string, ttl time.Duration) (*Response, error) { @@ -115,7 +116,9 @@ func (k *httpKeysAPI) Create(key, val string, ttl time.Duration) (*Response, err create.TTL = &uttl } - code, body, err := k.client.doWithTimeout(create) + ctx, cancel := context.WithTimeout(context.Background(), k.timeout) + code, body, err := k.client.do(ctx, create) + cancel() if err != nil { return nil, err } @@ -130,7 +133,9 @@ func (k *httpKeysAPI) Get(key string) (*Response, error) { Recursive: false, } - code, body, err := k.client.doWithTimeout(get) + ctx, cancel := context.WithTimeout(context.Background(), k.timeout) + code, body, err := k.client.do(ctx, get) + cancel() if err != nil { return nil, err } diff --git a/client/members.go b/client/members.go index 61f9a9cde..d49340eaf 100644 --- a/client/members.go +++ b/client/members.go @@ -25,6 +25,7 @@ import ( "path" "time" + "github.com/coreos/etcd/Godeps/_workspace/src/code.google.com/p/go.net/context" "github.com/coreos/etcd/etcdserver/etcdhttp/httptypes" "github.com/coreos/etcd/pkg/types" ) @@ -42,11 +43,11 @@ func NewMembersAPI(tr *http.Transport, ep string, to time.Duration) (MembersAPI, c := &httpClient{ transport: tr, endpoint: *u, - timeout: to, } mAPI := httpMembersAPI{ - client: c, + client: c, + timeout: to, } return &mAPI, nil @@ -59,12 +60,15 @@ type MembersAPI interface { } type httpMembersAPI struct { - client *httpClient + client *httpClient + timeout time.Duration } func (m *httpMembersAPI) List() ([]httptypes.Member, error) { req := &membersAPIActionList{} - code, body, err := m.client.doWithTimeout(req) + ctx, cancel := context.WithTimeout(context.Background(), m.timeout) + code, body, err := m.client.do(ctx, req) + cancel() if err != nil { return nil, err } @@ -88,7 +92,9 @@ func (m *httpMembersAPI) Add(peerURL string) (*httptypes.Member, error) { } req := &membersAPIActionAdd{peerURLs: urls} - code, body, err := m.client.doWithTimeout(req) + ctx, cancel := context.WithTimeout(context.Background(), m.timeout) + code, body, err := m.client.do(ctx, req) + cancel() if err != nil { return nil, err } @@ -107,7 +113,9 @@ func (m *httpMembersAPI) Add(peerURL string) (*httptypes.Member, error) { func (m *httpMembersAPI) Remove(memberID string) error { req := &membersAPIActionRemove{memberID: memberID} - code, _, err := m.client.doWithTimeout(req) + ctx, cancel := context.WithTimeout(context.Background(), m.timeout) + code, _, err := m.client.do(ctx, req) + cancel() if err != nil { return err }