// NewETCDNR creates an etcd NameResolver. func NewETCDNR(cfg etcdcl.Config) (naming.Resolver, error) { c, err := etcdcl.New(cfg) if err != nil { return nil, err } kAPI := etcdcl.NewKeysAPI(c) ctx, cancel := context.WithCancel(context.Background()) return &etcdNR{ kAPI: kAPI, recv: newRecvBuffer(), ctx: ctx, cancel: cancel, }, nil }
func newDiscovery(durl, dproxyurl string, id types.ID) (*discovery, error) { u, err := url.Parse(durl) if err != nil { return nil, err } token := u.Path u.Path = "" pf, err := newProxyFunc(dproxyurl) if err != nil { return nil, err } cfg := client.Config{ Transport: &http.Transport{ Proxy: pf, Dial: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).Dial, TLSHandshakeTimeout: 10 * time.Second, // TODO: add ResponseHeaderTimeout back when watch on discovery service writes header early }, Endpoints: []string{u.String()}, } c, err := client.New(cfg) if err != nil { return nil, err } dc := client.NewKeysAPIWithPrefix(c, "") return &discovery{ cluster: token, c: dc, id: id, url: u, clock: clockwork.NewRealClock(), }, nil }