client: elevate context to caller of MembersAPI

This commit is contained in:
Brian Waldon
2014-10-31 13:59:25 -07:00
parent 913d102a81
commit f0760d6246
3 changed files with 31 additions and 27 deletions

View File

@@ -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
}

View File

@@ -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
}