start builds the name resolver using the resolver.Builder in cc and returns any error encountered. It must always be the first operation performed on any newly created ccResolverWrapper, except that close may be called instead.
()
| 66 | // any error encountered. It must always be the first operation performed on |
| 67 | // any newly created ccResolverWrapper, except that close may be called instead. |
| 68 | func (ccr *ccResolverWrapper) start() error { |
| 69 | errCh := make(chan error) |
| 70 | ccr.serializer.TrySchedule(func(ctx context.Context) { |
| 71 | if ctx.Err() != nil { |
| 72 | errCh <- ctx.Err() |
| 73 | return |
| 74 | } |
| 75 | opts := resolver.BuildOptions{ |
| 76 | DisableServiceConfig: ccr.cc.dopts.disableServiceConfig, |
| 77 | DialCreds: ccr.cc.dopts.copts.TransportCredentials, |
| 78 | CredsBundle: ccr.cc.dopts.copts.CredsBundle, |
| 79 | Dialer: ccr.cc.dopts.copts.Dialer, |
| 80 | Authority: ccr.cc.authority, |
| 81 | MetricsRecorder: ccr.cc.metricsRecorderList, |
| 82 | } |
| 83 | var err error |
| 84 | // The delegating resolver is used unless: |
| 85 | // - A custom dialer is provided via WithContextDialer dialoption or |
| 86 | // - Proxy usage is disabled through WithNoProxy dialoption. |
| 87 | // In these cases, the resolver is built based on the scheme of target, |
| 88 | // using the appropriate resolver builder. |
| 89 | if ccr.cc.dopts.copts.Dialer != nil || !ccr.cc.dopts.useProxy { |
| 90 | ccr.resolver, err = ccr.cc.resolverBuilder.Build(ccr.cc.parsedTarget, ccr, opts) |
| 91 | } else { |
| 92 | ccr.resolver, err = delegatingresolver.New(ccr.cc.parsedTarget, ccr, opts, ccr.cc.resolverBuilder, ccr.cc.dopts.enableLocalDNSResolution) |
| 93 | } |
| 94 | errCh <- err |
| 95 | }) |
| 96 | return <-errCh |
| 97 | } |
| 98 | |
| 99 | func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOptions) { |
| 100 | ccr.serializer.TrySchedule(func(ctx context.Context) { |
nothing calls this directly
no test coverage detected