http2: server sent GOAWAY and closed the connection; LastStreamID=1999

16,720

The server is closing the connection for some reason; the backend closed, timed out, etc. There's not much you can do except retry, just as if you had any other connection error. There is some discussion in a arelated issue (https://golang.org/issue/18639) about retrying this automatically, but it generally looks like the client is working as intended.

Response.Body.Close does not close a connection, otherwise it would defeat the purpose of http1.1 and http2 using persistent connections. Reading and closing the response body is how you allow the connection to be reused by the http client.

Share:
16,720
Grail Finder
Author by

Grail Finder

Updated on June 26, 2022

Comments

  • Grail Finder
    Grail Finder almost 2 years

    I have for loop in which I calling that function that takes response from osrm server, after some time ioutil.ReadAll(resp.Body) returns err that prints http2: server sent GOAWAY and closed the connection; LastStreamID=1999, ErrCode=NO_ERROR, debug=""

    func RequestGET(req string) []byte {
    
        reqst, err := http.NewRequest("GET", req, nil)
        client := &http.Client{}
        resp, err := client.Do(reqst)
        if err != nil {
            panic(err)
        }
        resp_data, err := ioutil.ReadAll(resp.Body)
        resp.Body.Close()
        if err != nil {
            fmt.Println(err)
        }
        return resp_data
    }
    

    Isn't resp.Body.Close() closes a connection? I expected to get every time a new one.