mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
net: ensure dnsConfig search list is rooted
Avoids some extra work and string concatenation at query time. benchmark old allocs new allocs delta BenchmarkGoLookupIP-32 154 150 -2.60% BenchmarkGoLookupIPNoSuchHost-32 446 442 -0.90% BenchmarkGoLookupIPWithBrokenNameServer-32 564 568 +0.71% benchmark old bytes new bytes delta BenchmarkGoLookupIP-32 10824 10704 -1.11% BenchmarkGoLookupIPNoSuchHost-32 43140 42992 -0.34% BenchmarkGoLookupIPWithBrokenNameServer-32 46616 46680 +0.14% BenchmarkGoLookupIPWithBrokenNameServer's regression appears to be because it's actually only performing 1 LookupIP call, so the extra work done parsing the DNS config file doesn't amortize as well as for BenchmarkGoLookupIP or BenchmarkGoLOokupIPNoSuchHost, which perform 2000+ LookupIP calls per run. Update #15473. Change-Id: I98c8072f2f39e2f2ccd6c55e9e9bd309f5ad68f8 Reviewed-on: https://go-review.googlesource.com/22571 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
4d9bda51ff
commit
5fe1b35ed2
3 changed files with 27 additions and 20 deletions
|
|
@ -361,23 +361,23 @@ func (conf *dnsConfig) nameList(name string) []string {
|
|||
if rooted {
|
||||
return []string{name}
|
||||
}
|
||||
|
||||
hasNdots := count(name, '.') >= conf.ndots
|
||||
name += "."
|
||||
|
||||
// Build list of search choices.
|
||||
names := make([]string, 0, 1+len(conf.search))
|
||||
// If name has enough dots, try unsuffixed first.
|
||||
if count(name, '.') >= conf.ndots {
|
||||
names = append(names, name+".")
|
||||
if hasNdots {
|
||||
names = append(names, name)
|
||||
}
|
||||
// Try suffixes.
|
||||
for _, suffix := range conf.search {
|
||||
suffixed := name + "." + suffix
|
||||
if suffixed[len(suffixed)-1] != '.' {
|
||||
suffixed += "."
|
||||
}
|
||||
names = append(names, suffixed)
|
||||
names = append(names, name+suffix)
|
||||
}
|
||||
// Try unsuffixed, if not tried first above.
|
||||
if count(name, '.') < conf.ndots {
|
||||
names = append(names, name+".")
|
||||
if !hasNdots {
|
||||
names = append(names, name)
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue