diff --git a/balancer/balancer.go b/balancer/balancer.go index 917c242f8..0c4c0a70b 100644 --- a/balancer/balancer.go +++ b/balancer/balancer.go @@ -140,7 +140,7 @@ type ClientConn interface { UpdateBalancerState(s connectivity.State, p Picker) // ResolveNow is called by balancer to notify gRPC to do a name resolving. - ResolveNow(resolver.ResolveNowOption) + ResolveNow(resolver.ResolveNowOptions) // Target returns the dial target for this ClientConn. // diff --git a/balancer/grpclb/grpclb_remote_balancer.go b/balancer/grpclb/grpclb_remote_balancer.go index 897ca8ff4..aa0bb516a 100644 --- a/balancer/grpclb/grpclb_remote_balancer.go +++ b/balancer/grpclb/grpclb_remote_balancer.go @@ -372,7 +372,7 @@ func (ccw *remoteBalancerCCWrapper) watchRemoteBalancer() { } } // Trigger a re-resolve when the stream errors. - ccw.lb.cc.cc.ResolveNow(resolver.ResolveNowOption{}) + ccw.lb.cc.cc.ResolveNow(resolver.ResolveNowOptions{}) ccw.lb.mu.Lock() ccw.lb.remoteBalancerConnected = false diff --git a/balancer/grpclb/grpclb_test.go b/balancer/grpclb/grpclb_test.go index 82eb153fc..a38a3a136 100644 --- a/balancer/grpclb/grpclb_test.go +++ b/balancer/grpclb/grpclb_test.go @@ -871,7 +871,7 @@ func TestFallBackWithNoServerAddress(t *testing.T) { resolveNowCh := make(chan struct{}, 1) r, cleanup := manual.GenerateAndRegisterManualResolver() - r.ResolveNowCallback = func(resolver.ResolveNowOption) { + r.ResolveNowCallback = func(resolver.ResolveNowOptions) { select { case <-resolveNowCh: default: diff --git a/balancer/grpclb/grpclb_util.go b/balancer/grpclb/grpclb_util.go index 6d44ae5c0..e916ca3d2 100644 --- a/balancer/grpclb/grpclb_util.go +++ b/balancer/grpclb/grpclb_util.go @@ -67,7 +67,7 @@ type lbManualResolver struct { ccb balancer.ClientConn } -func (r *lbManualResolver) Build(_ resolver.Target, cc resolver.ClientConn, _ resolver.BuildOption) (resolver.Resolver, error) { +func (r *lbManualResolver) Build(_ resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) (resolver.Resolver, error) { r.ccr = cc return r, nil } @@ -77,7 +77,7 @@ func (r *lbManualResolver) Scheme() string { } // ResolveNow calls resolveNow on the parent ClientConn. -func (r *lbManualResolver) ResolveNow(o resolver.ResolveNowOption) { +func (r *lbManualResolver) ResolveNow(o resolver.ResolveNowOptions) { r.ccb.ResolveNow(o) } diff --git a/balancer_conn_wrappers.go b/balancer_conn_wrappers.go index 5356194c3..e98fe765e 100644 --- a/balancer_conn_wrappers.go +++ b/balancer_conn_wrappers.go @@ -186,7 +186,7 @@ func (ccb *ccBalancerWrapper) UpdateBalancerState(s connectivity.State, p balanc ccb.cc.csMgr.updateState(s) } -func (ccb *ccBalancerWrapper) ResolveNow(o resolver.ResolveNowOption) { +func (ccb *ccBalancerWrapper) ResolveNow(o resolver.ResolveNowOptions) { ccb.cc.resolveNow(o) } diff --git a/clientconn.go b/clientconn.go index 0a0917b8c..e0d3642ea 100644 --- a/clientconn.go +++ b/clientconn.go @@ -938,7 +938,7 @@ func (cc *ClientConn) applyServiceConfigAndBalancer(sc *ServiceConfig, addrs []r } } -func (cc *ClientConn) resolveNow(o resolver.ResolveNowOption) { +func (cc *ClientConn) resolveNow(o resolver.ResolveNowOptions) { cc.mu.RLock() r := cc.resolverWrapper cc.mu.RUnlock() @@ -1081,7 +1081,7 @@ func (ac *addrConn) adjustParams(r transport.GoAwayReason) { func (ac *addrConn) resetTransport() { for i := 0; ; i++ { if i > 0 { - ac.cc.resolveNow(resolver.ResolveNowOption{}) + ac.cc.resolveNow(resolver.ResolveNowOptions{}) } ac.mu.Lock() diff --git a/examples/features/load_balancing/client/main.go b/examples/features/load_balancing/client/main.go index c65549982..8cf0ba03b 100644 --- a/examples/features/load_balancing/client/main.go +++ b/examples/features/load_balancing/client/main.go @@ -92,7 +92,7 @@ func main() { type exampleResolverBuilder struct{} -func (*exampleResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { +func (*exampleResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { r := &exampleResolver{ target: target, cc: cc, @@ -119,8 +119,8 @@ func (r *exampleResolver) start() { } r.cc.UpdateState(resolver.State{Addresses: addrs}) } -func (*exampleResolver) ResolveNow(o resolver.ResolveNowOption) {} -func (*exampleResolver) Close() {} +func (*exampleResolver) ResolveNow(o resolver.ResolveNowOptions) {} +func (*exampleResolver) Close() {} func init() { resolver.Register(&exampleResolverBuilder{}) diff --git a/examples/features/name_resolving/client/main.go b/examples/features/name_resolving/client/main.go index 40ed2b810..1c56dcce1 100644 --- a/examples/features/name_resolving/client/main.go +++ b/examples/features/name_resolving/client/main.go @@ -98,7 +98,7 @@ func main() { // ResolverBuilder(https://godoc.org/google.golang.org/grpc/resolver#Builder). type exampleResolverBuilder struct{} -func (*exampleResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { +func (*exampleResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { r := &exampleResolver{ target: target, cc: cc, @@ -127,8 +127,8 @@ func (r *exampleResolver) start() { } r.cc.UpdateState(resolver.State{Addresses: addrs}) } -func (*exampleResolver) ResolveNow(o resolver.ResolveNowOption) {} -func (*exampleResolver) Close() {} +func (*exampleResolver) ResolveNow(o resolver.ResolveNowOptions) {} +func (*exampleResolver) Close() {} func init() { // Register the example ResolverBuilder. This is usually done in a package's diff --git a/internal/resolver/dns/dns_resolver.go b/internal/resolver/dns/dns_resolver.go index 25061bc9d..e7ffc4f60 100644 --- a/internal/resolver/dns/dns_resolver.go +++ b/internal/resolver/dns/dns_resolver.go @@ -108,7 +108,7 @@ type dnsBuilder struct { } // Build creates and starts a DNS resolver that watches the name resolution of the target. -func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { +func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { host, port, err := parseTarget(target.Endpoint, defaultPort) if err != nil { return nil, err @@ -181,7 +181,7 @@ type ipResolver struct { } // ResolveNow resend the address it stores, no resolution is needed. -func (i *ipResolver) ResolveNow(opt resolver.ResolveNowOption) { +func (i *ipResolver) ResolveNow(opt resolver.ResolveNowOptions) { select { case i.rn <- struct{}{}: default: @@ -229,7 +229,7 @@ type dnsResolver struct { } // ResolveNow invoke an immediate resolution of the target that this dnsResolver watches. -func (d *dnsResolver) ResolveNow(opt resolver.ResolveNowOption) { +func (d *dnsResolver) ResolveNow(opt resolver.ResolveNowOptions) { select { case d.rn <- struct{}{}: default: diff --git a/internal/resolver/dns/dns_resolver_test.go b/internal/resolver/dns/dns_resolver_test.go index 7ff3215fa..37dd953e0 100644 --- a/internal/resolver/dns/dns_resolver_test.go +++ b/internal/resolver/dns/dns_resolver_test.go @@ -730,7 +730,7 @@ func testDNSResolver(t *testing.T) { for _, a := range tests { b := NewBuilder() cc := &testClientConn{target: a.target} - r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOptions{}) if err != nil { t.Fatalf("%v\n", err) } @@ -820,7 +820,7 @@ func testDNSResolverWithSRV(t *testing.T) { for _, a := range tests { b := NewBuilder() cc := &testClientConn{target: a.target} - r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOptions{}) if err != nil { t.Fatalf("%v\n", err) } @@ -892,7 +892,7 @@ func testDNSResolveNow(t *testing.T) { for _, a := range tests { b := NewBuilder() cc := &testClientConn{target: a.target} - r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOptions{}) if err != nil { t.Fatalf("%v\n", err) } @@ -920,7 +920,7 @@ func testDNSResolveNow(t *testing.T) { t.Errorf("Resolved service config of target: %q = %+v, want %+v\n", a.target, sc, a.scWant) } revertTbl := mutateTbl(a.target) - r.ResolveNow(resolver.ResolveNowOption{}) + r.ResolveNow(resolver.ResolveNowOptions{}) for { addrs, cnt = cc.getAddress() if cnt == 2 { @@ -969,7 +969,7 @@ func testIPResolver(t *testing.T) { for _, v := range tests { b := NewBuilder() cc := &testClientConn{target: v.target} - r, err := b.Build(resolver.Target{Endpoint: v.target}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: v.target}, cc, resolver.BuildOptions{}) if err != nil { t.Fatalf("%v\n", err) } @@ -985,7 +985,7 @@ func testIPResolver(t *testing.T) { if !reflect.DeepEqual(v.want, addrs) { t.Errorf("Resolved addresses of target: %q = %+v, want %+v\n", v.target, addrs, v.want) } - r.ResolveNow(resolver.ResolveNowOption{}) + r.ResolveNow(resolver.ResolveNowOptions{}) for { addrs, cnt = cc.getAddress() if cnt == 2 { @@ -1028,12 +1028,12 @@ func TestResolveFunc(t *testing.T) { b := NewBuilder() for _, v := range tests { cc := &testClientConn{target: v.addr} - r, err := b.Build(resolver.Target{Endpoint: v.addr}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: v.addr}, cc, resolver.BuildOptions{}) if err == nil { r.Close() } if !reflect.DeepEqual(err, v.want) { - t.Errorf("Build(%q, cc, resolver.BuildOption{}) = %v, want %v", v.addr, err, v.want) + t.Errorf("Build(%q, cc, resolver.BuildOptions{}) = %v, want %v", v.addr, err, v.want) } } } @@ -1060,7 +1060,7 @@ func TestDisableServiceConfig(t *testing.T) { for _, a := range tests { b := NewBuilder() cc := &testClientConn{target: a.target} - r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{DisableServiceConfig: a.disableServiceConfig}) + r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOptions{DisableServiceConfig: a.disableServiceConfig}) if err != nil { t.Fatalf("%v\n", err) } @@ -1084,7 +1084,7 @@ func TestDNSResolverRetry(t *testing.T) { b := NewBuilder() target := "ipv4.single.fake" cc := &testClientConn{target: target} - r, err := b.Build(resolver.Target{Endpoint: target}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: target}, cc, resolver.BuildOptions{}) if err != nil { t.Fatalf("%v\n", err) } @@ -1103,7 +1103,7 @@ func TestDNSResolverRetry(t *testing.T) { // mutate the host lookup table so the target has 0 address returned. revertTbl := mutateTbl(target) // trigger a resolve that will get empty address list - r.ResolveNow(resolver.ResolveNowOption{}) + r.ResolveNow(resolver.ResolveNowOptions{}) for { addrs, _ = cc.getAddress() if len(addrs) == 0 { @@ -1221,7 +1221,7 @@ func TestCustomAuthority(t *testing.T) { b := NewBuilder() cc := &testClientConn{target: "foo.bar.com"} - r, err := b.Build(resolver.Target{Endpoint: "foo.bar.com", Authority: a.authority}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: "foo.bar.com", Authority: a.authority}, cc, resolver.BuildOptions{}) if err == nil { r.Close() @@ -1259,7 +1259,7 @@ func TestRateLimitedResolve(t *testing.T) { target := "foo.bar.com" b := NewBuilder() cc := &testClientConn{target: target} - r, err := b.Build(resolver.Target{Endpoint: target}, cc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{Endpoint: target}, cc, resolver.BuildOptions{}) if err != nil { t.Fatalf("resolver.Build() returned error: %v\n", err) } @@ -1292,7 +1292,7 @@ func TestRateLimitedResolve(t *testing.T) { case <-done: return default: - r.ResolveNow(resolver.ResolveNowOption{}) + r.ResolveNow(resolver.ResolveNowOptions{}) time.Sleep(1 * time.Millisecond) } } diff --git a/internal/resolver/passthrough/passthrough.go b/internal/resolver/passthrough/passthrough.go index 893d5d12c..520d9229e 100644 --- a/internal/resolver/passthrough/passthrough.go +++ b/internal/resolver/passthrough/passthrough.go @@ -26,7 +26,7 @@ const scheme = "passthrough" type passthroughBuilder struct{} -func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { +func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { r := &passthroughResolver{ target: target, cc: cc, @@ -48,7 +48,7 @@ func (r *passthroughResolver) start() { r.cc.UpdateState(resolver.State{Addresses: []resolver.Address{{Addr: r.target.Endpoint}}}) } -func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOption) {} +func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOptions) {} func (*passthroughResolver) Close() {} diff --git a/resolver/manual/manual.go b/resolver/manual/manual.go index 766df467c..e141f96a6 100644 --- a/resolver/manual/manual.go +++ b/resolver/manual/manual.go @@ -30,7 +30,7 @@ import ( // NewBuilderWithScheme creates a new test resolver builder with the given scheme. func NewBuilderWithScheme(scheme string) *Resolver { return &Resolver{ - ResolveNowCallback: func(resolver.ResolveNowOption) {}, + ResolveNowCallback: func(resolver.ResolveNowOptions) {}, scheme: scheme, } } @@ -41,7 +41,7 @@ type Resolver struct { // ResolveNowCallback is called when the ResolveNow method is called on the // resolver. Must not be nil. Must not be changed after the resolver may // be built. - ResolveNowCallback func(resolver.ResolveNowOption) + ResolveNowCallback func(resolver.ResolveNowOptions) scheme string // Fields actually belong to the resolver. @@ -56,7 +56,7 @@ func (r *Resolver) InitialState(s resolver.State) { } // Build returns itself for Resolver, because it's both a builder and a resolver. -func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { +func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { r.CC = cc if r.bootstrapState != nil { r.UpdateState(*r.bootstrapState) @@ -70,7 +70,7 @@ func (r *Resolver) Scheme() string { } // ResolveNow is a noop for Resolver. -func (r *Resolver) ResolveNow(o resolver.ResolveNowOption) { +func (r *Resolver) ResolveNow(o resolver.ResolveNowOptions) { r.ResolveNowCallback(o) } diff --git a/resolver/resolver.go b/resolver/resolver.go index 53c397e27..03567d7be 100644 --- a/resolver/resolver.go +++ b/resolver/resolver.go @@ -124,9 +124,14 @@ type Address struct { Metadata interface{} } -// BuildOption includes additional information for the builder to create +// BuildOption is a type alias of BuildOptions for legacy reasons. +// +// Deprecated: use BuildOptions instead. +type BuildOption = BuildOptions + +// BuildOptions includes additional information for the builder to create // the resolver. -type BuildOption struct { +type BuildOptions struct { // DisableServiceConfig indicates whether a resolver implementation should // fetch service config data. DisableServiceConfig bool @@ -224,14 +229,19 @@ type Builder interface { // // gRPC dial calls Build synchronously, and fails if the returned error is // not nil. - Build(target Target, cc ClientConn, opts BuildOption) (Resolver, error) + Build(target Target, cc ClientConn, opts BuildOptions) (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 } -// ResolveNowOption includes additional information for ResolveNow. -type ResolveNowOption struct{} +// ResolveNowOption is a type alias of ResolveNowOptions for legacy reasons. +// +// Deprecated: use ResolveNowOptions instead. +type ResolveNowOption = ResolveNowOptions + +// ResolveNowOptions includes additional information for ResolveNow. +type ResolveNowOptions struct{} // Resolver watches for the updates on the specified target. // Updates include address updates and service config updates. @@ -240,7 +250,7 @@ type Resolver interface { // again. It's just a hint, resolver can ignore this if it's not necessary. // // It could be called multiple times concurrently. - ResolveNow(ResolveNowOption) + ResolveNow(ResolveNowOptions) // Close closes the resolver. Close() } diff --git a/resolver_conn_wrapper.go b/resolver_conn_wrapper.go index 7dcefcfa0..35d40d0a6 100644 --- a/resolver_conn_wrapper.go +++ b/resolver_conn_wrapper.go @@ -92,7 +92,7 @@ func newCCResolverWrapper(cc *ClientConn) (*ccResolverWrapper, error) { if creds := cc.dopts.copts.TransportCredentials; creds != nil { credsClone = creds.Clone() } - rbo := resolver.BuildOption{ + rbo := resolver.BuildOptions{ DisableServiceConfig: cc.dopts.disableServiceConfig, DialCreds: credsClone, CredsBundle: cc.dopts.copts.CredsBundle, @@ -113,7 +113,7 @@ func newCCResolverWrapper(cc *ClientConn) (*ccResolverWrapper, error) { return ccr, nil } -func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOption) { +func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOptions) { ccr.resolverMu.Lock() if !ccr.done.HasFired() { ccr.resolver.ResolveNow(o) @@ -149,7 +149,7 @@ func (ccr *ccResolverWrapper) poll(err error) { ccr.polling = p go func() { for i := 0; ; i++ { - ccr.resolveNow(resolver.ResolveNowOption{}) + ccr.resolveNow(resolver.ResolveNowOptions{}) t := time.NewTimer(ccr.cc.dopts.resolveNowBackoff(i)) select { case <-p: diff --git a/resolver_conn_wrapper_test.go b/resolver_conn_wrapper_test.go index 5f78801f7..b1c352a1d 100644 --- a/resolver_conn_wrapper_test.go +++ b/resolver_conn_wrapper_test.go @@ -133,7 +133,7 @@ func testResolverErrorPolling(t *testing.T, badUpdate func(*manual.Resolver), go defer rcleanup() rn := make(chan struct{}) defer func() { close(rn) }() - r.ResolveNowCallback = func(resolver.ResolveNowOption) { rn <- struct{}{} } + r.ResolveNowCallback = func(resolver.ResolveNowOptions) { rn <- struct{}{} } defaultDialOptions := []DialOption{ WithInsecure(), diff --git a/xds/internal/balancer/edsbalancer/test_util_test.go b/xds/internal/balancer/edsbalancer/test_util_test.go index 0dafd526a..78f8d4b09 100644 --- a/xds/internal/balancer/edsbalancer/test_util_test.go +++ b/xds/internal/balancer/edsbalancer/test_util_test.go @@ -123,7 +123,7 @@ func (tcc *testClientConn) UpdateBalancerState(s connectivity.State, p balancer. tcc.newPickerCh <- p } -func (tcc *testClientConn) ResolveNow(resolver.ResolveNowOption) { +func (tcc *testClientConn) ResolveNow(resolver.ResolveNowOptions) { panic("not implemented") } diff --git a/xds/internal/balancer/xds_test.go b/xds/internal/balancer/xds_test.go index 16121cc1e..1577d4f43 100644 --- a/xds/internal/balancer/xds_test.go +++ b/xds/internal/balancer/xds_test.go @@ -168,7 +168,7 @@ func (t *testClientConn) NewSubConn(addrs []resolver.Address, opts balancer.NewS func (testClientConn) RemoveSubConn(balancer.SubConn) {} func (testClientConn) UpdateBalancerState(s connectivity.State, p balancer.Picker) {} -func (testClientConn) ResolveNow(resolver.ResolveNowOption) {} +func (testClientConn) ResolveNow(resolver.ResolveNowOptions) {} func (testClientConn) Target() string { return testServiceName } type scStateChange struct { diff --git a/xds/internal/resolver/xds_resolver.go b/xds/internal/resolver/xds_resolver.go index 352caeaca..ffd1ee58f 100644 --- a/xds/internal/resolver/xds_resolver.go +++ b/xds/internal/resolver/xds_resolver.go @@ -59,7 +59,7 @@ func NewBuilder() resolver.Builder { type xdsBuilder struct{} // Build helps implement the resolver.Builder interface. -func (b *xdsBuilder) Build(t resolver.Target, cc resolver.ClientConn, o resolver.BuildOption) (resolver.Resolver, error) { +func (b *xdsBuilder) Build(t resolver.Target, cc resolver.ClientConn, o resolver.BuildOptions) (resolver.Resolver, error) { // The xds balancer must have been registered at this point for the service // config to be parsed properly. scpr := cc.ParseServiceConfig(jsonSC) @@ -82,7 +82,7 @@ func (*xdsBuilder) Scheme() string { type xdsResolver struct{} // ResolveNow is a no-op at this point. -func (*xdsResolver) ResolveNow(o resolver.ResolveNowOption) {} +func (*xdsResolver) ResolveNow(o resolver.ResolveNowOptions) {} // Close is a no-op at this point. func (*xdsResolver) Close() {} diff --git a/xds/internal/resolver/xds_resolver_test.go b/xds/internal/resolver/xds_resolver_test.go index 569a19a8e..2b667d6ed 100644 --- a/xds/internal/resolver/xds_resolver_test.go +++ b/xds/internal/resolver/xds_resolver_test.go @@ -87,7 +87,7 @@ func TestXDSRsolverSchemeAndAddresses(t *testing.T) { } tcc := &testClientConn{done: make(chan struct{})} - r, err := b.Build(resolver.Target{}, tcc, resolver.BuildOption{}) + r, err := b.Build(resolver.Target{}, tcc, resolver.BuildOptions{}) if err != nil { t.Fatalf("xdsBuilder.Build() failed with error: %v", err) }