feat: wrap GZIPInputStream for connection reuse#840
feat: wrap GZIPInputStream for connection reuse#840codyoss merged 3 commits intogoogleapis:masterfrom
Conversation
If a connection is closed and there are some bytes that have not been read that connection can't be reused. Now GZIPInputStream will have all of its bytes read on close automatically to promote connection reuse. Cherry-picked: googleapis#749 Fixes: googleapis#367
|
Noticed that #749 had not been updated in a while so I cherry picked and fixed the PR comments. |
|
|
||
| /** | ||
| * This class in meant to wrap an {@link InputStream} so that all bytes in the steam are read and | ||
| * discarded on {@link InputStream#close()}. This ensures that the underlying connection has the |
There was a problem hiding this comment.
What if the stream never ends?
There was a problem hiding this comment.
That is a very good question. I am not sure.
google-http-client/src/main/java/com/google/api/client/http/ConsumingInputStream.java
Outdated
Show resolved
Hide resolved
google-http-client/src/main/java/com/google/api/client/http/ConsumingInputStream.java
Outdated
Show resolved
Hide resolved
| public void close() throws IOException { | ||
| if (!closed && inputStream != null) { | ||
| try { | ||
| ByteStreams.exhaust(this); |
There was a problem hiding this comment.
I wonder if we could have an infinite loop here. See internal discussion.
google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java
Show resolved
Hide resolved
google-http-client/src/test/java/com/google/api/client/http/ConsumingInputStreamTest.java
Outdated
Show resolved
Hide resolved
google-http-client/src/test/java/com/google/api/client/http/ConsumingInputStreamTest.java
Show resolved
Hide resolved
|
@elharo I fixed all of the comments. Do you still have reservations around a possible infinite stream? If so, any thought on how we should move forward with this?(Maybe we just don't if we think the infinite stream is too big of a risk as this feature requires exhausting all of the extra bytes for it to work.) |
elharo
left a comment
There was a problem hiding this comment.
given how this is used and that it's non-public the infinite steam issue probably won't come up
…-sdk to v2.0.3 (googleapis#840) [](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.appengine:appengine-api-1.0-sdk](https://togithub.com/GoogleCloudPlatform/appengine-java-standard) | `2.0.2` -> `2.0.3` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>GoogleCloudPlatform/appengine-java-standard</summary> ### [`v2.0.3`](https://togithub.com/GoogleCloudPlatform/appengine-java-standard/releases/v2.0.3) Release 2.0.3 from github open source code. </details> --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/google-auth-library-java).
If a connection is closed and there are some bytes that have not
been read that connection can't be reused. Now GZIPInputStream
will have all of its bytes read on close automatically to promote
connection reuse.
Cherry-picked: #749
Fixes: #367