Skip to content

update all of linkerd2-proxy-http to std::future#541

Merged
hawkw merged 11 commits intomaster-tokio-0.2from
eliza/0.2-http
May 29, 2020
Merged

update all of linkerd2-proxy-http to std::future#541
hawkw merged 11 commits intomaster-tokio-0.2from
eliza/0.2-http

Conversation

@hawkw
Copy link
Contributor

@hawkw hawkw commented May 28, 2020

This PR updates everything remaining in the linkerd2-proxy-http crate
to use std::future. In particular, this includes the following
modules:

  • add_header
  • insert
  • override_authority
  • header_from_target

The updates for these modules was pretty mechanical and there are no
significant changes, just updates to use the new versions of the
Future and Service traits.

In addition, I've put back the stack layers from these modules, where
possible (in some cases, these modules were used by other code that has
yet to be updated or is pending in a separate branch). I've also
re-enabled some of the the discovery integration tests for the
linkerd2-dst-override header. Some of these tests depend on service
profiles as well, so they will be enabled once #537 merges.

Furthermore, I've done a little cleanup now that everything in the crate
has been updated. I removed the grpc module entirely. Its only purpose
was converting between the tower_grpc::Body and hyper::Payload
traits, and tonic and the std::future version of hyper both use
the http_body::Body trait, so this conversion is unnecessary. Finally,
since all the code which depended on the old versions of tokio and
futures has now been updated, I've removed the dependencies on the
legacy versions, and renamed the futures_03 and tokio_02 renaming
imports to just futures and tokio.

Signed-off-by: Eliza Weisman [email protected]

@hawkw hawkw requested review from kleimkuhler and olix0r May 28, 2020 17:21
@hawkw hawkw self-assigned this May 28, 2020
@hawkw hawkw requested a review from a team May 29, 2020 16:41
hawkw added 11 commits May 29, 2020 09:57
Signed-off-by: Eliza Weisman <[email protected]>
Signed-off-by: Eliza Weisman <[email protected]>
Signed-off-by: Eliza Weisman <[email protected]>
Signed-off-by: Eliza Weisman <[email protected]>
i don't know why this broke everything but it did!

Signed-off-by: Eliza Weisman <[email protected]>
Its purpose was to convert between `tower_grpc`'s `Body`  and `hyper`'s
`Payload`. Now, both crates use the `http_body` crate's `Body` trait,
so, as far as I can tell, these conversions are no longer necessary.

Signed-off-by: Eliza Weisman <[email protected]>
Signed-off-by: Eliza Weisman <[email protected]>
Copy link
Contributor

@kleimkuhler kleimkuhler left a comment

Choose a reason for hiding this comment

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

👍

@hawkw hawkw merged commit c7f17d6 into master-tokio-0.2 May 29, 2020
hawkw added a commit that referenced this pull request Jun 1, 2020
This branch updates the proxy handle time metric and puts the layer that
records it back in the stack.

Depends on #541 (for `insert`).

Signed-off-by: Eliza Weisman <[email protected]>
hawkw added a commit that referenced this pull request Jun 1, 2020
This branch updates the proxy's OpenCensus tracing code and collector
client to use Tonic and `std::future`, and puts the OpenCensus stack
layers back in the inbound and outbound proxy.

Of note: the previous implementation constructed a single client
`Service` which was reused when restarting a new RPC if the stream
terminated. Because Tonic's generated RPCs borrow the client service
mutably for the duration of the RPC future, if we want these futures to
be `'static`, we must move the service into the future. Rather than
requiring the service to be `Clone`, I solved this by replacing the
`Service` instance held by the client with a `NewService` instance. I
don't *think* this should be an issue, let me know if I'm wrong?

I'd like to do some additional testing with the OpenCensus integration
tests but I'm opening this PR now to start getting reviews.

Depends on #541.

Signed-off-by: Eliza Weisman <[email protected]>
hawkw added a commit that referenced this pull request Jun 9, 2020
**Note**: this branch was already approved (as #543), but was 
accidentally merged into the dev branch for #541, which it depended
on and was set as the base until that branch merged. It looks like, 
when merging #543, I forgot to change the base branch back to
`master-tokio-0.2`, and these changes never made it to master.

---

This branch updates the proxy's OpenCensus tracing code and collector
client to use Tonic and `std::future`, and puts the OpenCensus stack
layers back in the inbound and outbound proxy.

Of note: the previous implementation constructed a single client
`Service` which was reused when restarting a new RPC if the stream
terminated. Because Tonic's generated RPCs borrow the client service
mutably for the duration of the RPC future, if we want these futures to
be `'static`, we must move the service into the future. Rather than
requiring the service to be `Clone`, I solved this by replacing the
`Service` instance held by the client with a `NewService` instance. I
don't *think* this should be an issue, let me know if I'm wrong?

I'd like to do some additional testing with the OpenCensus integration
tests but I'm opening this PR now to start getting reviews.

Signed-off-by: Eliza Weisman <[email protected]>
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.

3 participants