diff --git a/zrpc/resolver/internal/discovbuilder.go b/zrpc/resolver/internal/discovbuilder.go index 65b31445..ed377d13 100644 --- a/zrpc/resolver/internal/discovbuilder.go +++ b/zrpc/resolver/internal/discovbuilder.go @@ -9,41 +9,10 @@ import ( "google.golang.org/grpc/resolver" ) -type discovBuilder struct { - cc resolver.ClientConn - update func() -} +type discovBuilder struct{} func (b *discovBuilder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) ( resolver.Resolver, error) { - b.cc = cc - if err := b.updateState(target); err != nil { - return nil, err - } - - return &nopResolver{cc: cc}, nil -} - -func (b *discovBuilder) Scheme() string { - return DiscovScheme -} - -func (b *discovBuilder) updateState(target resolver.Target) error { - if b.update == nil { - update, err := b.buildEndpointsUpdater(target) - if err != nil { - return err - } - - b.update = update - } - - b.update() - - return nil -} - -func (b *discovBuilder) buildEndpointsUpdater(target resolver.Target) (func(), error) { hosts := strings.FieldsFunc(targets.GetAuthority(target), func(r rune) bool { return r == EndpointSepChar }) @@ -60,13 +29,18 @@ func (b *discovBuilder) buildEndpointsUpdater(target resolver.Target) (func(), e Addr: val, }) } - if err := b.cc.UpdateState(resolver.State{ + if err := cc.UpdateState(resolver.State{ Addresses: addrs, }); err != nil { logx.Error(err) } } sub.AddListener(update) + update() - return update, nil + return &nopResolver{cc: cc}, nil +} + +func (b *discovBuilder) Scheme() string { + return DiscovScheme } diff --git a/zrpc/resolver/internal/kubebuilder.go b/zrpc/resolver/internal/kubebuilder.go index f26c3ab4..5eecec46 100644 --- a/zrpc/resolver/internal/kubebuilder.go +++ b/zrpc/resolver/internal/kubebuilder.go @@ -28,8 +28,7 @@ type kubeResolver struct { stopCh chan struct{} } -func (r *kubeResolver) ResolveNow(_ resolver.ResolveNowOptions) { -} +func (r *kubeResolver) ResolveNow(_ resolver.ResolveNowOptions) {} func (r *kubeResolver) start() { threading.GoSafe(func() {