Browse Source

client: introduce httpClusterClient

Brian Waldon 11 years ago
parent
commit
8d519ffdb8
3 changed files with 54 additions and 12 deletions
  1. 52 0
      client/cluster.go
  2. 1 6
      client/keys.go
  3. 1 6
      client/members.go

+ 52 - 0
client/cluster.go

@@ -0,0 +1,52 @@
+/*
+   Copyright 2014 CoreOS, Inc.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package client
+
+import (
+	"net/http"
+	"net/url"
+
+	"github.com/coreos/etcd/Godeps/_workspace/src/code.google.com/p/go.net/context"
+)
+
+func newHTTPClusterClient(tr *http.Transport, eps []string) (*httpClusterClient, error) {
+	c := httpClusterClient{
+		endpoints: make([]*httpClient, len(eps)),
+	}
+
+	for i, ep := range eps {
+		u, err := url.Parse(ep)
+		if err != nil {
+			return nil, err
+		}
+		c.endpoints[i] = &httpClient{
+			transport: tr,
+			endpoint:  *u,
+		}
+	}
+
+	return &c, nil
+}
+
+type httpClusterClient struct {
+	endpoints []*httpClient
+}
+
+func (c *httpClusterClient) do(ctx context.Context, act httpAction) (int, []byte, error) {
+	//TODO(bcwaldon): introduce retry logic so all endpoints are attempted
+	return c.endpoints[0].do(ctx, act)
+}

+ 1 - 6
client/keys.go

@@ -50,16 +50,11 @@ func NewDiscoveryKeysAPI(tr *http.Transport, ep string, to time.Duration) (KeysA
 }
 
 func newHTTPKeysAPIWithPrefix(tr *http.Transport, ep string, to time.Duration, prefix string) (*httpKeysAPI, error) {
-	u, err := url.Parse(ep)
+	c, err := newHTTPClusterClient(tr, []string{ep})
 	if err != nil {
 		return nil, err
 	}
 
-	c := &httpClient{
-		transport: tr,
-		endpoint:  *u,
-	}
-
 	kAPI := httpKeysAPI{
 		client:  c,
 		prefix:  prefix,

+ 1 - 6
client/members.go

@@ -35,16 +35,11 @@ var (
 )
 
 func NewMembersAPI(tr *http.Transport, ep string, to time.Duration) (MembersAPI, error) {
-	u, err := url.Parse(ep)
+	c, err := newHTTPClusterClient(tr, []string{ep})
 	if err != nil {
 		return nil, err
 	}
 
-	c := &httpClient{
-		transport: tr,
-		endpoint:  *u,
-	}
-
 	mAPI := httpMembersAPI{
 		client:  c,
 		timeout: to,