From 59410edba9a4c2d86d5aa6996ddb62cd86d26234 Mon Sep 17 00:00:00 2001 From: Ain Ghazal <99027643+ainghazal@users.noreply.github.com> Date: Mon, 4 Jul 2022 11:35:45 +0200 Subject: [PATCH] doc(step-by-step): further improvements on design doc (#830) * doc(step-by-step): further improvements on design doc * Update docs/design/dd-003-step-by-step.md * Update dd-003-step-by-step.md Co-authored-by: Simone Basso --- docs/design/dd-003-step-by-step.md | 95 +++++++++++------- .../img/git-probe-cli-change-histogram.png | Bin 0 -> 24606 bytes docs/design/img/git-probe-cli-netx-deps.png | Bin 0 -> 184474 bytes 3 files changed, 58 insertions(+), 37 deletions(-) create mode 100644 docs/design/img/git-probe-cli-change-histogram.png create mode 100644 docs/design/img/git-probe-cli-netx-deps.png diff --git a/docs/design/dd-003-step-by-step.md b/docs/design/dd-003-step-by-step.md index 4baa56a..9ba59ea 100644 --- a/docs/design/dd-003-step-by-step.md +++ b/docs/design/dd-003-step-by-step.md @@ -37,7 +37,7 @@ experiment would involve using constructors very similar to the standard library. Such deviations were supposed to be made only to meet our specific measurement goals; -2. The decorator pattern has lead to complexity in creating measurement types, +2. The decorator pattern has led to complexity in creating measurement types, which in turn seems to be the reason why the previous issue exists; 3. The decorator pattern does not allow us to precisely collect all the @@ -256,15 +256,13 @@ We use the `netx` name to identify **net**work e**x**tensions in ooni/probe-cli. What is great about using stdlib-like types is that we're using code patterns that people already know. -In this document, we're not going to discuss how netx should be -internally implemented. What matters is that we have a way to mimic -stdlib-like types. See -[internal/model/netx.go](https://github.com/ooni/probe-cli/blob/v3.15.1/internal/model/netx.go) -for details on those types. +This document is not concerned about the internal representation of `netx`, but +rather about how to offer an API that resembles the stdlib. See [internal/model/netx.go](https://github.com/ooni/probe-cli/blob/v3.15.1/internal/model/netx.go) for details on those types. -In fact, what remains to discuss in this document is how we use these netx types to -perform measurements. And this seems more of a software engineering -problem than anything else. +The analysis that follows, and the resulting proposal, tries to answer the +question of how we can _best use these netx types_ to perform measurements +(according to the relevant criteria). And this seems more of a software +engineering problem than anything else. Yet, before jumping right into this topic, I think it is worth mentioning that netx should do the following: @@ -282,9 +280,9 @@ stuck; see, for example, [ooni/probe#1609](https://github.com/ooni/probe/issues/ All network connections we create in OONI (for measuring or communicating with support services) have these concerns. Measurement code has additional responsibilities, such as collecting and -interpreting the network observations. Therefore, separation of concerns -suggests that measurement code be implemented by other packages using -netxlite as a dependency. +interpreting the network observations. The "separation of concerns" principle +suggests us that measurement code should be implemented by other packages that +depend on netxlite. (The "lite" in `netxlite` reflects the fact that it does not concern itself with measurements unlike [the original netx](df-002-netx.md), which contained @@ -326,7 +324,8 @@ become more complex than what `httptrace` could provide us with. I tried to adapt how this code would look if we used it now. As [dd-002-netx.md](dd-002-netx.md) suggests, here I am trying to separate data collection and interpretation, which looked like a great idea at -the time but has now become a bottleneck. +the time but has now become a bottleneck when writing experiments, because it +needs a lot of extra code: ```Go // doWhatYouKnowBest uses stdlib-like constructs to collect data. @@ -341,6 +340,7 @@ func doWhatYouKnowBest(ctx context.Context, URL string) (*http.Response, []byte, if err != nil { return nil, nil, err } + // the whole body could be too big, so we read only a fixed size r := io.LimitReader(maxBodySnapshotSize) data, err := netxlite.ReadAllContext(ctx, r) if err != nil { @@ -464,11 +464,17 @@ conn, err := dialer.DialContext(ctx, /* ... */) In the later case, it's evident that we're *decorating* the original dialer with an extended dialer that knows how to perform network measurements. In the former case, it feels magic that we're setting some -value as an opaque any inside of the context, and there's a documented +value as an opaque `any` type inside of the context, and there's a documented promise we'll use this value. -(In fairness, however, the second implementation could be extended with wrappers -that makes it look like the first one, which should solve the clarity -problem entailed by using a context *to do dependency injection*.) + +The point here is that this code has some serious semantics issues, in the +sense that the reader only sees they're setting a value with a context, but +it's unclear what that does unless you read the documentation, which is not a +great UX. + +In fairness, the second implementation could be extended with wrappers, +which would makes it look like the first one: that should solve the clarity +problem entailed by using a context *to do dependency injection*. Debugging, in particular, feels clumsy. Suppose we are taking a code path that, for some reason, does not honor the value put inside the context. @@ -594,7 +600,7 @@ needs to construct, say, a Dialer by composing netxlite's Dialer with a bunch of wrappers also implementing model.Dialer. It is no coincidence that the code above omits the code to compose a -base Dialer with a saving wrapper. Since we adopted this tactic, we +base Dialer with a saving wrapper. Since the adoption of this tactic, we spent some time wrestling with composing data types. #### Decorator ~madness and how to overcome it: netx.Config @@ -628,7 +634,7 @@ wrapping, as we have seen in the measurex example above. This reckoning led us to design APIs such as the Config-based API in netx and the (again) Config-based API in urlgetter. -Here's a (perhaps disgusting?) excerpt from netx in ooni/probe-cli@v3.15.1 +Here's a (perhaps bureaucratic) excerpt from netx in ooni/probe-cli@v3.15.1 that shows how we overcome constructor complexity by declaring a flat `Config` structure from which to construct a `model.Resolver`: @@ -696,8 +702,10 @@ This code could be made prettier ([see how it looks now](https://github.com/ooni/probe-cli/blob/2502a237fb5e2dd3dc4e0db23dd19eabb292f6a1/internal/engine/netx/resolver.go#L13)). But we are not here to compliment ourselves on our now-prettier code, rather we want to analyze -what makes our code more obscure and less -scalable than it could be. +what makes our code more obscure and less scalable than it could be. Note that +we mean scalable in terms of _developer time_: we feel we could move faster if +we changed the current approach, because it needs too much effort to +support data collection. I would argue that the central issue of this code is that it's declaring it will take the burden of constructing the Resolver @@ -738,7 +746,7 @@ func ExperimentMain(ctx context.Context, URL string) { That is, we're still in `doWhatYouKnowBest` territory. Incidentally, this also means that (1) there's still distance between collection and interpretation, and (2) we're still producing a flat trace. We have -basically traded the context magic with construction complexity, which +basically traded the context magic for construction complexity, which we overcome by adding abstraction without changing all the other pain points of the original netx implementation. @@ -767,8 +775,8 @@ programmer needs to learn an entirely new API for implementing OONI measurements (unless they want to hack at the `netx` or `netxlite` library level). Crucially, we still have the same post-processing pain we had with netx. There -is always a "now we figured out what happened" step -that runs over a full trace. +is always a "now let's try to figure out what happened" step that runs over a +full trace. Also, very importantly: debugging was hard with the original netx because of the context magic. Now it is hard because there are many @@ -778,11 +786,11 @@ layers of abstraction. If you see a line like: dialer := netx.NewDialer(config) ``` -It's completely opaque to you what the dialer could or could not do. To -understand, you need to read the content of the config. The matter -becomes even more complex if that config is not just declared in the -codebase but is actually code generated, as happens with urlgetter, which -generates a Config for netx. +It's completely opaque to you what the dialer could be doing. To +understand the underlying operation, you need to read the content of the +config. The matter becomes even more complex if that config is not just +declared in the codebase but is actually generated code, as happens with +urlgetter, which generates a Config for netx. #### Difficulty in collecting precise observations @@ -931,7 +939,7 @@ and interpretation. Moreover, because this approach is relatively rigid, it is more difficult to collect precise observations than it would be using the context to do dependency injection. -Looking backward, it has not been a bad idea to declare in `netx` docs +In retrospective, it was a good thing to declare in `netx` docs that we're OK with keeping this approach, but we would like new experiments to, ehm, experiment with leaner techniques. @@ -1175,12 +1183,25 @@ complexity in experiments than in the support library. This seems like a scalability argument. If all experiments extensively use the same support library, then this library will feel the pressure of all the needs of all experiments. Conversely, the pressure is much lower -if experiments are written in -terms of basic primitives plus a set of support -functions. Hence, my time would be spent -more on improving experiments than polishing and enhancing the +if experiments are written in terms of basic primitives plus a set of support +functions. This seems to call for applying the OCP Principle: "Open for +extension, Closed for modification". Hence, my time would be spent more on +improving experiments and writing new ones than polishing and enhancing the support library. +For the purposes of illustrating the discussion, a couple of metrics seem to +(at least visually) support this idea: a close-up of the internal dependencies +diagram, and a histogram of the files that changed more often. + +| ![a graph depicting the internal dependencies to and from internal/netx](img/git-probe-cli-netx-deps.png) | +|:---------------------------------------------------------------------------------------------------------:| +| *Figure 1: dependencies around internal/netx* | + +| ![histogram of chnges in probe-cli codebase](img/git-probe-cli-change-histogram.png) | +|:------------------------------------------------------------------------------------:| +| *Figure 2: histogram of the more-often changed files in probe-cli* | + + Additionally, Arturo argues that we should strive to keep the implementation of experiments (including the implementation of the primitives they use) as constant in time as possible to ensure that we @@ -1290,8 +1311,8 @@ Finally, all the discussion is in place to get to a concrete proposal. I tried to reimplement the telegram experiment using a pure step-by-step approach ([here's the gist](https://gist.github.com/bassosimone/f6e680d35805174d1f150bc15ef754af)). -It looks fine, but one ends up writing a support library such as `measurex`. Yet, -as noted above, the API exposed by such a measurement +It looks fine, but one ends up writing a support library such as `measurex`. +On the positive side, the API exposed by such a measurement library matters, and an API familiar to Go developers seems preferable to the API implemented by `measurex`. @@ -1338,7 +1359,7 @@ logger model.Logger, zeroTime time.Time, tk *TestKeys, address string) { weburl := measurexlite.NewURL("https", webDomain, "", "") endpoint := net.JoinHostPort(address, "443") ol := measurexlite.NewOperationLogger(logger, "GET %s @ %s", weburl.String(), endpoint) - index := tk.newIndex() + index := tk.nextAvailableIndex() tk.registerSubmeasurement(index, endpoint, "web_https") // 1. establish a TCP connection with the endpoint diff --git a/docs/design/img/git-probe-cli-change-histogram.png b/docs/design/img/git-probe-cli-change-histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..b37429965d1148eda6f15c343506a0cc1afb3634 GIT binary patch literal 24606 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༯uPyKEclQT1wC~PrH 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 SdSu~i5!<)=dDhUwIsXTTwWl8d literal 0 HcmV?d00001 diff --git a/docs/design/img/git-probe-cli-netx-deps.png b/docs/design/img/git-probe-cli-netx-deps.png new file mode 100644 index 0000000000000000000000000000000000000000..dd237fdd0c1d0dc6df107b0073d77040604cb411 GIT binary patch literal 184474 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

W~`|f_-bbzg{7#B^=uWyn8mx4Ng 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