Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove unnecessary draining the resp.Body #847

Merged
merged 3 commits into from
Mar 5, 2018

Conversation

diorahman
Copy link
Contributor

@diorahman diorahman commented Feb 7, 2018

The behavior on connection reuse is introduced in golang/go@18072ad.

Fixes #843


This change is Reviewable

@googlebot googlebot added the cla: yes Indication that the PR author has signed a Google Contributor License Agreement. label Feb 7, 2018
Copy link
Collaborator

@gmlewis gmlewis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @diorahman, but I don't think this is quite correct yet. Please take a look at my comment.

github/github.go Outdated
defer func() {
// Drain up to 512 bytes and close the body to let the Transport reuse the connection
io.CopyN(ioutil.Discard, resp.Body, 512)
resp.Body.Close()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe that we should go back to how this looked prior to the addition of the drain:
e0ff711

Specifically, this should now be:

defer resp.Body.Close()

Note that this is an HTTP client, and its documentation says:

The client must close the response body when finished with it:
...<example elided>...

@gmlewis
Copy link
Collaborator

gmlewis commented Feb 7, 2018

This also means that the title of the PR is not correct. The response body does indeed need to be closed.

The behavior on connection reuse without manually draining resp.Body is
introduced in golang/go@18072ad.

Fixes google#843
@diorahman diorahman changed the title Remove unnecessary closing the body for conn reuse Remove unnecessary draining the resp.Body Feb 8, 2018
github/github.go Outdated
resp.Body.Close()
}()

resp.Body.Close()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@diorahman This still needs a correction.

As @gmlewis mentioned, this should be same as how this looked prior to the addition of the drain:
e0ff711

That means, you should defer this statement so that it executes only when the relevant routine returns.

Please change it to:

defer resp.Body.Close()

Copy link
Member

@sahildua2305 sahildua2305 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 💯

@gmlewis this should be good for final review.

github/github.go Outdated
resp.Body.Close()
}()

defer resp.Body.Close()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I would like to see a blank line between the defer and the newResponse... since they aren't closely related.

...and while you're add it, I would like to tightly bind the defer to the c.client.Do above, so if you would like to get rid of the blank line above (line 480), that would be fantastic, IMHO.

Thanks, @diorahman!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah OK. Thanks @gmlewis for the review. I updated it on d285239.

Copy link
Collaborator

@gmlewis gmlewis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you, @diorahman and @sahildua2305!
LGTM.
Merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cla: yes Indication that the PR author has signed a Google Contributor License Agreement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants