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
}

View File

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