client: introduce httpClusterClient

This commit is contained in:
Brian Waldon 2014-10-30 17:10:01 -07:00
parent 323fb1ec85
commit 8d519ffdb8
3 changed files with 54 additions and 12 deletions

52
client/cluster.go Normal file
View File

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

View File

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

View File

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