Merge pull request #1601 from jonboulle/client

client: return ErrNoEndpoint when none available
release-2.0
Jonathan Boulle 2014-11-04 14:58:22 -08:00
commit c628d7f412
2 changed files with 15 additions and 0 deletions

View File

@ -30,6 +30,7 @@ import (
var (
ErrTimeout = context.DeadlineExceeded
ErrCanceled = context.Canceled
ErrNoEndpoints = errors.New("no endpoints available")
ErrTooManyRedirects = errors.New("too many redirects")
DefaultRequestTimeout = 5 * time.Second
@ -91,6 +92,9 @@ type httpClusterClient struct {
}
func (c *httpClusterClient) Do(ctx context.Context, act HTTPAction) (resp *http.Response, body []byte, err error) {
if len(c.endpoints) == 0 {
return nil, nil, ErrNoEndpoints
}
for _, hc := range c.endpoints {
resp, body, err = hc.Do(ctx, act)
if err != nil {
@ -118,6 +122,9 @@ func (c *httpClusterClient) Sync(ctx context.Context) error {
for _, m := range ms {
eps = append(eps, m.ClientURLs...)
}
if len(eps) == 0 {
return ErrNoEndpoints
}
nc, err := newHTTPClusterClient(c.transport, eps)
if err != nil {
return err

View File

@ -234,6 +234,14 @@ func TestHTTPClusterClientDo(t *testing.T) {
wantErr: ErrCanceled,
},
// return err if there are no endpoints
{
client: &httpClusterClient{
endpoints: []HTTPClient{},
},
wantErr: ErrNoEndpoints,
},
// return err if all endpoints return arbitrary errors
{
client: &httpClusterClient{