specifyUpstream specifies the upstream for domains.
(domains []string, u string, idx int)
| 256 | |
| 257 | // specifyUpstream specifies the upstream for domains. |
| 258 | func (p *configParser) specifyUpstream(domains []string, u string, idx int) (err error) { |
| 259 | dnsUpstream, ok := p.upstreamsIndex[u] |
| 260 | // TODO(e.burkov): Improve identifying duplicate upstreams. |
| 261 | if !ok { |
| 262 | // create an upstream |
| 263 | dnsUpstream, err = upstream.AddressToUpstream(u, p.options.Clone()) |
| 264 | if err != nil { |
| 265 | return fmt.Errorf("cannot prepare the upstream: %s", err) |
| 266 | } |
| 267 | |
| 268 | // save to the index |
| 269 | p.upstreamsIndex[u] = dnsUpstream |
| 270 | } |
| 271 | |
| 272 | addr := dnsUpstream.Address() |
| 273 | if len(domains) == 0 { |
| 274 | // TODO(s.chzhen): Handle duplicates. |
| 275 | p.upstreams = append(p.upstreams, dnsUpstream) |
| 276 | |
| 277 | // TODO(s.chzhen): Logs without index. |
| 278 | p.logger.Debug("set upstream", "idx", idx, "addr", addr) |
| 279 | } else { |
| 280 | p.includeToReserved(dnsUpstream, domains) |
| 281 | |
| 282 | p.logger.Debug( |
| 283 | "upstream is reserved", |
| 284 | "idx", idx, |
| 285 | "addr", addr, |
| 286 | "domains_num", len(domains), |
| 287 | ) |
| 288 | } |
| 289 | |
| 290 | return nil |
| 291 | } |
| 292 | |
| 293 | // excludeFromReserved excludes more specific domains from reserved upstreams |
| 294 | // querying. |
no test coverage detected