Make resolver Build() take a target struct (#1567)

This commit is contained in:
Menghan Li
2017-10-09 16:33:58 -07:00
committed by GitHub
parent 06233310cc
commit 3f10311ccf
7 changed files with 91 additions and 29 deletions

View File

@ -65,8 +65,8 @@ type dnsBuilder struct {
}
// Build creates and starts a DNS resolver that watches the name resolution of the target.
func (b *dnsBuilder) Build(target string, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {
host, port, err := parseTarget(target)
func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {
host, port, err := parseTarget(target.Endpoint)
if err != nil {
return nil, err
}

View File

@ -681,7 +681,7 @@ func testDNSResolver(t *testing.T) {
for _, a := range tests {
b := NewBuilder()
cc := &testClientConn{target: a.target}
r, err := b.Build(a.target, cc, resolver.BuildOption{})
r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{})
if err != nil {
t.Fatalf("%v\n", err)
}
@ -753,7 +753,7 @@ func testDNSResolveNow(t *testing.T) {
for _, a := range tests {
b := NewBuilder()
cc := &testClientConn{target: a.target}
r, err := b.Build(a.target, cc, resolver.BuildOption{})
r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{})
if err != nil {
t.Fatalf("%v\n", err)
}
@ -830,7 +830,7 @@ func testIPResolver(t *testing.T) {
for _, v := range tests {
b := NewBuilder()
cc := &testClientConn{target: v.target}
r, err := b.Build(v.target, cc, resolver.BuildOption{})
r, err := b.Build(resolver.Target{Endpoint: v.target}, cc, resolver.BuildOption{})
if err != nil {
t.Fatalf("%v\n", err)
}
@ -887,7 +887,7 @@ func TestResolveFunc(t *testing.T) {
b := NewBuilder()
for _, v := range tests {
cc := &testClientConn{target: v.addr}
r, err := b.Build(v.addr, cc, resolver.BuildOption{})
r, err := b.Build(resolver.Target{Endpoint: v.addr}, cc, resolver.BuildOption{})
if err == nil {
r.Close()
}

View File

@ -39,13 +39,11 @@ type Resolver struct {
scheme string
// Fields actually belong to the resolver.
target string
cc resolver.ClientConn
cc resolver.ClientConn
}
// Build returns itself for Resolver, because it's both a builder and a resolver.
func (r *Resolver) Build(target string, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {
r.target = target
func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {
r.cc = cc
return r, nil
}

View File

@ -21,17 +21,13 @@
// test only.
package passthrough
import (
"strings"
"google.golang.org/grpc/resolver"
)
import "google.golang.org/grpc/resolver"
const scheme = "passthrough"
type passthroughBuilder struct{}
func (*passthroughBuilder) Build(target string, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {
func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {
r := &passthroughResolver{
target: target,
cc: cc,
@ -45,13 +41,12 @@ func (*passthroughBuilder) Scheme() string {
}
type passthroughResolver struct {
target string
target resolver.Target
cc resolver.ClientConn
}
func (r *passthroughResolver) start() {
addr := strings.TrimPrefix(r.target, scheme+":///")
r.cc.NewAddress([]resolver.Address{{Addr: addr}})
r.cc.NewAddress([]resolver.Address{{Addr: r.target.Endpoint}})
}
func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOption) {}

View File

@ -102,13 +102,21 @@ type ClientConn interface {
NewServiceConfig(serviceConfig string)
}
// Target represents a target for gRPC, as specified in:
// https://github.com/grpc/grpc/blob/master/doc/naming.md.
type Target struct {
Scheme string
Authority string
Endpoint string
}
// Builder creates a resolver that will be used to watch name resolution updates.
type Builder interface {
// Build creates a new resolver for the given target.
//
// gRPC dial calls Build synchronously, and fails if the returned error is
// not nil.
Build(target string, cc ClientConn, opts BuildOption) (Resolver, error)
Build(target Target, cc ClientConn, opts BuildOption) (Resolver, error)
// Scheme returns the scheme supported by this resolver.
// Scheme is defined at https://github.com/grpc/grpc/blob/master/doc/naming.md.
Scheme() string