Those messages aren't GODEBUG output, it's the errors printed by the program as received from http.Client.Get. I'll file a bug.
On Tue, Aug 2, 2016 at 9:51 PM Brad Fitzpatrick <bradf...@golang.org> wrote: > Sorry, I don't read all of golang-nuts@ and never saw that. You could've > escalated, though. There are at least two bug trackers available to you: > > http://b/ > https://github.com/golang/go/issues (the one I prefer) > > But I think your interpretation of the the HTTP/2 client is wrong. > > If you're a video person, there's a talk on Go's HTTP client and its > HTTP/2<->HTTP/1<->HTTP/2 dialing sandwich... > https://www.youtube.com/watch?v=FARQMJndUn0 > If you're not a video person, the slides are linked from youtube. > > Your output in this email from your program ( > https://play.golang.org/p/zKthX7Y9RW) doesn't include any error output. > You can ignore the GODEBUG output. If it says there's no cached connection, > that means http2 has no cached connection it needs to dial (which http1 > will do). Then http1 works as normal, unless it decides that it negotiated > http2, and then it goes back to http2. > > But any rate-limiting you refer to is unchanged from before, since HTTP/1 > still dials as normal. There's an open bug to optimize it (to only start 1 > or 2 TCP connections until we know the negotiated protocol, and then settle > on 6 or 1 max connections, etc), but it's no different today than Go 1.5 > and earlier. > > In any case, if you have a reproducible bug, let's move this to a bug > tracker. > > > > > > > > > > > > > On Tue, Aug 2, 2016 at 6:36 PM, 'Russ Amos' via golang-nuts < > golang-nuts@googlegroups.com> wrote: > >> I'm seeing "http2: no cached connection was available" failures from >> http.Client when I start many (~hundreds) requests at once. (This issue was >> also posted to golang-nuts@ in April >> <https://groups.google.com/d/topic/golang-nuts/0YEWYwBOJPI/discussion>, >> with no response) >> >> I may not understand correctly, but I thought this kind of usage was fine >> with HTTP 1.1 and net/http, because the spec mandates a max number of >> outgoing connections to any given host, so http.Client throttles open >> connections and effectively queues requests past that. The http2 package >> seems not to do the same. That might be correct according to the spec (I >> don't know), but makes using http.Client weird -- I need to rate limit its >> usage if the server is HTTP 2, but it does rate limiting for me if the >> server is HTTP 1.1. >> >> Is my understanding correct? Is this a bug? Is the expectation that my >> app should be rate limiting, regardless of server version? >> >> Also, It seems the error being returned is exported >> <https://godoc.org/golang.org/x/net/http2#pkg-variables> in the http2 >> package, but is not exported in the bundled version >> <https://golang.org/src/net/http/h2_bundle.go#L4775> in net/http. If it >> was exported, I think I could at least retry on my own, but perhaps that's >> not the intended usage anyway. >> >> I wrote this program <https://play.golang.org/p/zKthX7Y9RW> hitting >> https://www.google.com/ to demonstrate -- here are a few run results: >> >> $ GODEBUG=http2client=0 go run /tmp/foo.go >> $ GODEBUG=http2client=0 go run /tmp/foo.go >> $ GODEBUG=http2client=0 go run /tmp/foo.go >> $ GODEBUG=http2client=0 go run /tmp/foo.go >> $ GODEBUG=http2client=0 go run /tmp/foo.go >> >> $ GODEBUG=http2client=1 go run /tmp/foo.go >> Get https://www.google.com/: http2: no cached connection was available >> Get https://www.google.com/: http2: no cached connection was available >> Get https://www.google.com/: http2: no cached connection was available >> ... >> $ GODEBUG=http2client=1 go run /tmp/foo.go >> Get https://www.google.com/: http2: no cached connection was available >> $ GODEBUG=http2client=1 go run /tmp/foo.go >> $ GODEBUG=http2client=1 go run /tmp/foo.go >> Get https://www.google.com/: http2: no cached connection was available >> Get https://www.google.com/: http2: no cached connection was available >> Get https://www.google.com/: http2: no cached connection was available >> ... >> $ GODEBUG=http2client=1 go run /tmp/foo.go >> Get https://www.google.com/: http2: no cached connection was available >> Get https://www.google.com/: http2: no cached connection was available >> Get https://www.google.com/: http2: no cached connection was available >> ... >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.