MCPcopy
hub / github.com/grpc/grpc-go / Build

Method Build

internal/resolver/dns/dns_resolver.go:119–155  ·  view source on GitHub ↗

Build creates and starts a DNS resolver that watches the name resolution of the target.

(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions)

Source from the content-addressed store, hash-verified

117// Build creates and starts a DNS resolver that watches the name resolution of
118// the target.
119func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
120 host, port, err := parseTarget(target.Endpoint(), defaultPort)
121 if err != nil {
122 return nil, err
123 }
124
125 // IP address.
126 if ipAddr, err := formatIP(host); err == nil {
127 addr := []resolver.Address{{Addr: ipAddr + ":" + port}}
128 cc.UpdateState(resolver.State{
129 Addresses: addr,
130 Endpoints: []resolver.Endpoint{{Addresses: addr}},
131 })
132 return deadResolver{}, nil
133 }
134
135 // DNS address (non-IP).
136 ctx, cancel := context.WithCancel(context.Background())
137 d := &dnsResolver{
138 host: host,
139 port: port,
140 ctx: ctx,
141 cancel: cancel,
142 cc: cc,
143 rn: make(chan struct{}, 1),
144 enableServiceConfig: envconfig.EnableTXTServiceConfig && !opts.DisableServiceConfig,
145 }
146
147 d.resolver, err = internal.NewNetResolver(target.URL.Host)
148 if err != nil {
149 return nil, err
150 }
151
152 d.wg.Add(1)
153 go d.watcher()
154 return d, nil
155}
156
157// Scheme returns the naming scheme of this resolver builder, which is "dns".
158func (b *dnsBuilder) Scheme() string {

Callers

nothing calls this directly

Calls 6

watcherMethod · 0.95
formatIPFunction · 0.85
EndpointMethod · 0.80
parseTargetFunction · 0.70
UpdateStateMethod · 0.65
AddMethod · 0.65

Tested by

no test coverage detected