[go] net: make Resolver.PreferGo work more as documented

101 views
Skip to first unread message

Brad Fitzpatrick (Gerrit)

unread,
Mar 15, 2018, 2:31:04 AM3/15/18
to Ian Lance Taylor, goph...@pubsubhelper.golang.org, Brad Fitzpatrick, golang-co...@googlegroups.com

Brad Fitzpatrick would like Ian Lance Taylor to review this change.

View Change

net: make Resolver.PreferGo work more as documented

Fixes #24393

Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
---
M src/net/conf.go
M src/net/dnsclient_unix.go
M src/net/lookup_unix.go
3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/net/conf.go b/src/net/conf.go
index c10aafe..2c21331 100644
--- a/src/net/conf.go
+++ b/src/net/conf.go
@@ -114,18 +114,19 @@
// canUseCgo reports whether calling cgo functions is allowed
// for non-hostname lookups.
func (c *conf) canUseCgo() bool {
- return c.hostLookupOrder("") == hostLookupCgo
+ return c.hostLookupOrder(nil, "") == hostLookupCgo
}

// hostLookupOrder determines which strategy to use to resolve hostname.
-func (c *conf) hostLookupOrder(hostname string) (ret hostLookupOrder) {
+// The provided Resolver is optional. nil means to not consider its options.
+func (c *conf) hostLookupOrder(r *Resolver, hostname string) (ret hostLookupOrder) {
if c.dnsDebugLevel > 1 {
defer func() {
print("go package net: hostLookupOrder(", hostname, ") = ", ret.String(), "\n")
}()
}
fallbackOrder := hostLookupCgo
- if c.netGo {
+ if c.netGo || (r != nil && r.PreferGo) {
fallbackOrder = hostLookupFilesDNS
}
if c.forceCgoLookupHost || c.resolv.unknownOpt || c.goos == "android" {
diff --git a/src/net/dnsclient_unix.go b/src/net/dnsclient_unix.go
index d2a6dc4..7ca5d60 100644
--- a/src/net/dnsclient_unix.go
+++ b/src/net/dnsclient_unix.go
@@ -524,7 +524,7 @@
// goLookupIP is the native Go implementation of LookupIP.
// The libc versions are in cgo_*.go.
func (r *Resolver) goLookupIP(ctx context.Context, host string) (addrs []IPAddr, err error) {
- order := systemConf().hostLookupOrder(host)
+ order := systemConf().hostLookupOrder(r, host)
addrs, _, err = r.goLookupIPCNAMEOrder(ctx, host, order)
return
}
@@ -676,7 +676,7 @@

// goLookupCNAME is the native Go (non-cgo) implementation of LookupCNAME.
func (r *Resolver) goLookupCNAME(ctx context.Context, host string) (string, error) {
- order := systemConf().hostLookupOrder(host)
+ order := systemConf().hostLookupOrder(r, host)
_, cname, err := r.goLookupIPCNAMEOrder(ctx, host, order)
return cname.String(), err
}
diff --git a/src/net/lookup_unix.go b/src/net/lookup_unix.go
index 0b92242..8e77b8c 100644
--- a/src/net/lookup_unix.go
+++ b/src/net/lookup_unix.go
@@ -74,7 +74,7 @@
}

func (r *Resolver) lookupHost(ctx context.Context, host string) (addrs []string, err error) {
- order := systemConf().hostLookupOrder(host)
+ order := systemConf().hostLookupOrder(r, host)
if !r.PreferGo && order == hostLookupCgo {
if addrs, err, ok := cgoLookupHost(ctx, host); ok {
return addrs, err
@@ -89,7 +89,7 @@
if r.PreferGo {
return r.goLookupIP(ctx, host)
}
- order := systemConf().hostLookupOrder(host)
+ order := systemConf().hostLookupOrder(r, host)
if order == hostLookupCgo {
if addrs, err, ok := cgoLookupIP(ctx, host); ok {
return addrs, err

To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: go
Gerrit-Branch: master
Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
Gerrit-Change-Number: 100875
Gerrit-PatchSet: 1
Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
Gerrit-MessageType: newchange

Ian Lance Taylor (Gerrit)

unread,
Mar 15, 2018, 3:56:05 PM3/15/18
to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Test?

Patch set 1:Run-TryBot +1Code-Review +2

View Change

    To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: go
    Gerrit-Branch: master
    Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
    Gerrit-Change-Number: 100875
    Gerrit-PatchSet: 1
    Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
    Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
    Gerrit-Comment-Date: Thu, 15 Mar 2018 19:56:03 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    Gerrit-MessageType: comment

    Gobot Gobot (Gerrit)

    unread,
    Mar 15, 2018, 3:56:25 PM3/15/18
    to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Ian Lance Taylor, golang-co...@googlegroups.com

    TryBots beginning. Status page: https://farmer.golang.org/try?commit=16d68f41

    View Change

      To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: go
      Gerrit-Branch: master
      Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
      Gerrit-Change-Number: 100875
      Gerrit-PatchSet: 1
      Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
      Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
      Gerrit-CC: Gobot Gobot <go...@golang.org>
      Gerrit-Comment-Date: Thu, 15 Mar 2018 19:56:23 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: No
      Gerrit-MessageType: comment

      Gobot Gobot (Gerrit)

      unread,
      Mar 15, 2018, 3:59:35 PM3/15/18
      to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Ian Lance Taylor, golang-co...@googlegroups.com

      Build is still in progress...
      This change failed on linux-amd64:
      See https://storage.googleapis.com/go-build-log/16d68f41/linux-amd64_fcd6c2ca.log

      Consult https://build.golang.org/ to see whether it's a new failure. Other builds still in progress; subsequent failure notices suppressed until final report.

      View Change

        To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

        Gerrit-Project: go
        Gerrit-Branch: master
        Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
        Gerrit-Change-Number: 100875
        Gerrit-PatchSet: 1
        Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
        Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
        Gerrit-CC: Gobot Gobot <go...@golang.org>
        Gerrit-Comment-Date: Thu, 15 Mar 2018 19:59:33 +0000

        Brad Fitzpatrick (Gerrit)

        unread,
        Mar 15, 2018, 4:01:26 PM3/15/18
        to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Gobot Gobot, Ian Lance Taylor, golang-co...@googlegroups.com

        I suppose the existing tests should also compile.

        View Change

          To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

          Gerrit-Project: go
          Gerrit-Branch: master
          Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
          Gerrit-Change-Number: 100875
          Gerrit-PatchSet: 1
          Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
          Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
          Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
          Gerrit-CC: Gobot Gobot <go...@golang.org>
          Gerrit-Comment-Date: Thu, 15 Mar 2018 20:01:21 +0000

          Gobot Gobot (Gerrit)

          unread,
          Mar 15, 2018, 4:05:59 PM3/15/18
          to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Ian Lance Taylor, golang-co...@googlegroups.com

          5 of 17 TryBots failed:
          Failed on linux-amd64: https://storage.googleapis.com/go-build-log/16d68f41/linux-amd64_fcd6c2ca.log
          Failed on linux-386: https://storage.googleapis.com/go-build-log/16d68f41/linux-386_9b59d1fb.log
          Failed on freebsd-amd64-11_1: https://storage.googleapis.com/go-build-log/16d68f41/freebsd-amd64-11_1_1bff6de8.log
          Failed on linux-amd64-race: https://storage.googleapis.com/go-build-log/16d68f41/linux-amd64-race_7159a80d.log
          Failed on openbsd-amd64-62: https://storage.googleapis.com/go-build-log/16d68f41/openbsd-amd64-62_084562ae.log

          Consult https://build.golang.org/ to see whether they are new failures.

          Patch set 1:TryBot-Result -1

          View Change

            To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
            Gerrit-Change-Number: 100875
            Gerrit-PatchSet: 1
            Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
            Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
            Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
            Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
            Gerrit-Comment-Date: Thu, 15 Mar 2018 20:05:57 +0000

            Brad Fitzpatrick (Gerrit)

            unread,
            Mar 16, 2018, 1:52:23 AM3/16/18
            to Brad Fitzpatrick, Ian Lance Taylor, Gobot Gobot, goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

            Brad Fitzpatrick uploaded patch set #2 to this change.

            View Change

            net: make Resolver.PreferGo work more as documented

            Fixes #24393

            Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
            ---
            M src/net/conf.go
            M src/net/conf_test.go
            M src/net/dnsclient_unix.go
            M src/net/lookup_unix.go
            4 files changed, 25 insertions(+), 8 deletions(-)

            To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
            Gerrit-Change-Number: 100875
            Gerrit-PatchSet: 2
            Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
            Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
            Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
            Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
            Gerrit-MessageType: newpatchset

            Brad Fitzpatrick (Gerrit)

            unread,
            Mar 16, 2018, 1:52:23 AM3/16/18
            to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Gobot Gobot, Ian Lance Taylor, golang-co...@googlegroups.com

            Uploaded patch set 2.

            View Change

              To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

              Gerrit-Project: go
              Gerrit-Branch: master
              Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
              Gerrit-Change-Number: 100875
              Gerrit-PatchSet: 2
              Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
              Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
              Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
              Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
              Gerrit-Comment-Date: Fri, 16 Mar 2018 05:52:19 +0000

              Brad Fitzpatrick (Gerrit)

              unread,
              Mar 16, 2018, 1:53:58 AM3/16/18
              to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Gobot Gobot, Ian Lance Taylor, golang-co...@googlegroups.com

              Patch set 2:Run-TryBot +1

              View Change

                To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

                Gerrit-Project: go
                Gerrit-Branch: master
                Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
                Gerrit-Change-Number: 100875
                Gerrit-PatchSet: 2
                Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
                Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
                Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
                Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
                Gerrit-Comment-Date: Fri, 16 Mar 2018 05:53:55 +0000

                Gobot Gobot (Gerrit)

                unread,
                Mar 16, 2018, 1:54:13 AM3/16/18
                to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Ian Lance Taylor, golang-co...@googlegroups.com

                TryBots beginning. Status page: https://farmer.golang.org/try?commit=f8da8b94

                View Change

                  To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

                  Gerrit-Project: go
                  Gerrit-Branch: master
                  Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
                  Gerrit-Change-Number: 100875
                  Gerrit-PatchSet: 2
                  Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
                  Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
                  Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
                  Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
                  Gerrit-Comment-Date: Fri, 16 Mar 2018 05:54:11 +0000

                  Gobot Gobot (Gerrit)

                  unread,
                  Mar 16, 2018, 2:06:11 AM3/16/18
                  to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, Ian Lance Taylor, golang-co...@googlegroups.com

                  TryBots are happy.

                  Patch set 2:TryBot-Result +1

                  View Change

                    To view, visit change 100875. To unsubscribe, or for help writing mail filters, visit settings.

                    Gerrit-Project: go
                    Gerrit-Branch: master
                    Gerrit-Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
                    Gerrit-Change-Number: 100875
                    Gerrit-PatchSet: 2
                    Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
                    Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
                    Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
                    Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
                    Gerrit-Comment-Date: Fri, 16 Mar 2018 06:06:09 +0000

                    Brad Fitzpatrick (Gerrit)

                    unread,
                    Mar 16, 2018, 3:02:43 AM3/16/18
                    to Brad Fitzpatrick, goph...@pubsubhelper.golang.org, golang-...@googlegroups.com, Gobot Gobot, Ian Lance Taylor, golang-co...@googlegroups.com

                    Brad Fitzpatrick merged this change.

                    View Change

                    Approvals: Ian Lance Taylor: Looks good to me, approved Brad Fitzpatrick: Run TryBots Gobot Gobot: TryBots succeeded
                    net: make Resolver.PreferGo work more as documented

                    Fixes #24393

                    Change-Id: I8bcee34cdf30472663d866ed6056301d8445215c
                    Reviewed-on: https://go-review.googlesource.com/100875
                    Run-TryBot: Brad Fitzpatrick <brad...@golang.org>
                    TryBot-Result: Gobot Gobot <go...@golang.org>
                    Reviewed-by: Ian Lance Taylor <ia...@golang.org>

                    ---
                    M src/net/conf.go
                    M src/net/conf_test.go
                    M src/net/dnsclient_unix.go
                    M src/net/lookup_unix.go
                    4 files changed, 25 insertions(+), 8 deletions(-)

                    diff --git a/src/net/conf.go b/src/net/conf.go
                    index c10aafe..2c21331 100644
                    --- a/src/net/conf.go
                    +++ b/src/net/conf.go
                    @@ -114,18 +114,19 @@
                    // canUseCgo reports whether calling cgo functions is allowed
                    // for non-hostname lookups.
                    func (c *conf) canUseCgo() bool {
                    - return c.hostLookupOrder("") == hostLookupCgo
                    + return c.hostLookupOrder(nil, "") == hostLookupCgo
                    }

                    // hostLookupOrder determines which strategy to use to resolve hostname.
                    -func (c *conf) hostLookupOrder(hostname string) (ret hostLookupOrder) {
                    +// The provided Resolver is optional. nil means to not consider its options.
                    +func (c *conf) hostLookupOrder(r *Resolver, hostname string) (ret hostLookupOrder) {
                    if c.dnsDebugLevel > 1 {
                    defer func() {
                    print("go package net: hostLookupOrder(", hostname, ") = ", ret.String(), "\n")
                    }()
                    }
                    fallbackOrder := hostLookupCgo
                    - if c.netGo {
                    + if c.netGo || (r != nil && r.PreferGo) {
                    fallbackOrder = hostLookupFilesDNS
                    }
                    if c.forceCgoLookupHost || c.resolv.unknownOpt || c.goos == "android" {
                    diff --git a/src/net/conf_test.go b/src/net/conf_test.go
                    index 17d03f4..a6d6987 100644
                    --- a/src/net/conf_test.go
                    +++ b/src/net/conf_test.go
                    @@ -33,6 +33,7 @@
                    tests := []struct {
                    name string
                    c *conf
                    + resolver *Resolver
                    hostTests []nssHostTest
                    }{
                    {
                    @@ -322,6 +323,21 @@
                    {"x.com", "myhostname", hostLookupCgo},
                    },
                    },
                    + // Issue 24393: make sure "Resolver.PreferGo = true" acts like netgo.
                    + {
                    + name: "resolver-prefergo",
                    + resolver: &Resolver{PreferGo: true},
                    + c: &conf{
                    + goos: "darwin",
                    + forceCgoLookupHost: true, // always true for darwin
                    + resolv: defaultResolvConf,
                    + nss: nssStr(""),
                    + netCgo: true,
                    + },
                    + hostTests: []nssHostTest{
                    + {"localhost", "myhostname", hostLookupFilesDNS},
                    + },
                    + },
                    }

                    origGetHostname := getHostname
                    @@ -331,7 +347,7 @@
                    for _, ht := range tt.hostTests {
                    getHostname = func() (string, error) { return ht.localhost, nil }

                    - gotOrder := tt.c.hostLookupOrder(ht.host)
                    + gotOrder := tt.c.hostLookupOrder(tt.resolver, ht.host)
                    if gotOrder != ht.want {
                    t.Errorf("%s: hostLookupOrder(%q) = %v; want %v", tt.name, ht.host, gotOrder, ht.want)
                    Gerrit-PatchSet: 3
                    Gerrit-Owner: Brad Fitzpatrick <brad...@golang.org>
                    Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
                    Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
                    Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
                    Gerrit-MessageType: merged
                    Reply all
                    Reply to author
                    Forward
                    0 new messages