mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
client: elevate context to caller of MembersAPI
This commit is contained in:
parent
913d102a81
commit
f0760d6246
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user