Thanks for the extremely quick triage, Brad. I'll work around it in my
program, for now.

On Tue, Aug 2, 2016 at 10:08 PM Brad Fitzpatrick <bradf...@golang.org>
wrote:

> Oh, sorry, I read that as GODEBUG=http2debug=1.
>
> Okay, I'll follow up in https://golang.org/issues/16582
>
> On Tue, Aug 2, 2016 at 7:00 PM, Russ Amos <r...@google.com> wrote:
>
>> 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.

Reply via email to