Browse Source

Merge pull request #1601 from jonboulle/client

client: return ErrNoEndpoint when none available
Jonathan Boulle 11 years ago
parent
commit
c628d7f412
2 changed files with 15 additions and 0 deletions
  1. 7 0
      client/http.go
  2. 8 0
      client/http_test.go

+ 7 - 0
client/http.go

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

+ 8 - 0
client/http_test.go

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