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

BREAKING CHANGE: feat: move StreamAllContext to netxlite #1490

Merged
merged 7 commits into from
Feb 5, 2024

Conversation

bassosimone
Copy link
Contributor

@bassosimone bassosimone commented Feb 5, 2024

This diff moves the StreamAllContext implementation from webconnectivitylte to netxlite.

We flagged this diff as BREAKING CHANGE because we also fixed a bug where, in case of context timeout, StreamAllContext was suppressing the error rather than reporting it. Re-reading the code, that felt incorrect because it did not allow us to clearly know that we timed out reading the body, which could be caused by throttling.

The new behavior seems more accurate.

Because of this change, I also felt it was time to add explicit tests for cases where we download fails because it takes too much time for us to fetch the whole response body. I am not 100% sure we are correctly flagging this case, but an http-failure probably seems fine at the moment and we can always revisit this as we learn more about throttling.

Part of ooni/probe#2654.

@bassosimone bassosimone changed the title Issue/2654 feat: move StreamAllContext to netxlite Feb 5, 2024
@bassosimone bassosimone marked this pull request as ready for review February 5, 2024 18:42
@bassosimone bassosimone requested a review from hellais as a code owner February 5, 2024 18:42
@bassosimone bassosimone marked this pull request as draft February 5, 2024 18:45
@@ -24,7 +24,7 @@ require (
github.com/miekg/dns v1.1.57
github.com/mitchellh/go-wordwrap v1.0.1
github.com/montanaflynn/stats v0.7.1
github.com/ooni/netem v0.0.0-20231213064826-3cc1ea5e942c
github.com/ooni/netem v0.0.0-20240205182847-14e4ce92d41e
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated to add additional throttling functions

@@ -267,7 +267,7 @@ func (t *CleartextFlow) httpTransaction(ctx context.Context, network, address, a
t.CookieJar.SetCookies(req.URL, cookies)
}
reader := io.LimitReader(resp.Body, maxbody)
body, err = StreamAllContext(ctx, reader)
body, err = netxlite.StreamAllContext(ctx, reader)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Moved implementation

@bassosimone bassosimone changed the title feat: move StreamAllContext to netxlite BREAKING CHANGE: feat: move StreamAllContext to netxlite Feb 5, 2024
// expired when there's an error and decide what it is proper to
// do in such a case. Typically, when streaming the HTTP response
// body for Web Connectivity v0.5, the right thing to do is to
// report the body as being truncated.
Copy link
Contributor Author

@bassosimone bassosimone Feb 5, 2024

Choose a reason for hiding this comment

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

This documents the behavior change with respect to the previous implementation. I think it's more accurate to fail in Web Connectivity LTE in such a case as long as the response body is included into the response.

  • TODO make sure this is true. DONE and added comments related to where this happens.

Oh noes, this test will probably fail badly if different
environments throttle differently.
if err != nil {
err = NewTopLevelGenericErrWrapper(err)
}
return data, err
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Unlike the previous implementation, here I have separated the code and error wrapping to reduce the risk that refactoring leads us to miss adding error wrapping in all error paths.

// implemented inside Web Connectivity v0.5 transformed the
// context.DeadlineExceeded error to nil. However, this is wrong
// because it prevents distinguishing real EOF and the case in
// which we timed out receiving from the socket.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This documents the BREAKING CHANGE mentioned in the commit message.

@@ -270,3 +270,133 @@ func TestCopyContext(t *testing.T) {
wg.Wait()
})
}

func TestStreamAllContext(t *testing.T) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This adapts ReadAllContext's test suite to StreamAllContext.

@bassosimone
Copy link
Contributor Author

Okay, I was expecting tests to fail but maybe I was overly pessimistic. The thing is that I assumed each run of the new added QA tests could product a different body because throttling is not deterministic. But, actually, the thing is that we do not regenerate the measurements at each run, we just use them along with the minipipeline. Because of this, we're fine!

},
"response": {
"body": {
"data": "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",
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This shows we download some body before timing out!

},
"response": {
"body": {
"data": "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",
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This shows we download some body before timing out!

@bassosimone bassosimone marked this pull request as ready for review February 5, 2024 20:19
@bassosimone bassosimone merged commit 8b13815 into master Feb 5, 2024
23 of 25 checks passed
@bassosimone bassosimone deleted the issue/2654 branch February 5, 2024 20:24
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this pull request Feb 13, 2024
This diff moves the `StreamAllContext` implementation from
`webconnectivitylte` to `netxlite`.

We flagged this diff as BREAKING CHANGE because we also fixed a bug
where, in case of context timeout, `StreamAllContext` was suppressing
the error rather than reporting it. Re-reading the code, that felt
incorrect because it did not allow us to clearly know that we timed out
reading the body, which could be caused by throttling.

The new behavior seems more accurate.

Because of this change, I also felt it was time to add explicit tests
for cases where we download fails because it takes too much time for us
to fetch the whole response body. I am not 100% sure we are correctly
flagging this case, but an `http-failure` probably seems fine at the
moment and we can always revisit this as we learn more about throttling.

Part of ooni/probe#2654.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant