Make resolver Build() take a target struct (#1567)
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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) {}
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user