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:
Matthew Dempsky 2016-04-28 11:31:59 -07:00
parent 4d9bda51ff
commit 5fe1b35ed2
3 changed files with 27 additions and 20 deletions

View file

@ -22,7 +22,7 @@ var dnsReadConfigTests = []struct {
name: "testdata/resolv.conf",
want: &dnsConfig{
servers: []string{"8.8.8.8:53", "[2001:4860:4860::8888]:53", "[fe80::1%lo0]:53"},
search: []string{"localdomain"},
search: []string{"localdomain."},
ndots: 5,
timeout: 10 * time.Second,
attempts: 3,
@ -34,7 +34,7 @@ var dnsReadConfigTests = []struct {
name: "testdata/domain-resolv.conf",
want: &dnsConfig{
servers: []string{"8.8.8.8:53"},
search: []string{"localdomain"},
search: []string{"localdomain."},
ndots: 1,
timeout: 5 * time.Second,
attempts: 2,
@ -44,7 +44,7 @@ var dnsReadConfigTests = []struct {
name: "testdata/search-resolv.conf",
want: &dnsConfig{
servers: []string{"8.8.8.8:53"},
search: []string{"test", "invalid"},
search: []string{"test.", "invalid."},
ndots: 1,
timeout: 5 * time.Second,
attempts: 2,
@ -57,7 +57,7 @@ var dnsReadConfigTests = []struct {
ndots: 1,
timeout: 5 * time.Second,
attempts: 2,
search: []string{"domain.local"},
search: []string{"domain.local."},
},
},
{
@ -105,7 +105,7 @@ func TestDNSReadMissingFile(t *testing.T) {
ndots: 1,
timeout: 5 * time.Second,
attempts: 2,
search: []string{"domain.local"},
search: []string{"domain.local."},
}
if !reflect.DeepEqual(conf, want) {
t.Errorf("missing resolv.conf:\ngot: %+v\nwant: %+v", conf, want)
@ -119,11 +119,11 @@ var dnsDefaultSearchTests = []struct {
}{
{
name: "host.long.domain.local",
want: []string{"long.domain.local"},
want: []string{"long.domain.local."},
},
{
name: "host.local",
want: []string{"local"},
want: []string{"local."},
},
{
name: "host",