[roll] Roll fuchsia [ffx][repo] Drop connections during shutdown

The ffx repository server was unable to shut down long lived connections
for a few reasons.

First, we hit [2808] where the Hyper server would not clean up idle
connections, because that functionality is only enabled
with the tokio executor, not with async-executor, or the built-in
Fuchsia executor.

Second, when a client accessed the 'auto/' endpoint, we would create a
service, which would then dispatch a request handler to service the
request, and finally we'd launch a task which would forward on
any SSE events. We moved ownership of this task into a
`Repository::on_drop` method, which let us tie the lifetime of the SSE
sender to the repository, but meant the handler would keep running even
if the rest of the server was stopped.

Third, even if we wired up the detached 'auto/` handler to listen for a
shutdown signal from the server, the connection still would not get
closed because hyper implements HTTP/1.1's keep-alive functionality.
This allows the client to make another request without having to
reestablish a connection.

This patch fixes these problems in a few different ways:

* This Migrates off hyper's high level `Server` type into the lower
  level `conn` api, which is much easier to control task spawning.

* This creates a `TaskExecutor`, which is a pseudo executor that owns
  any spawned task, and will drop any spwned task when the
  `TaskExecutor` is dropped.

* Creates a `GracefulConnection` future, which allows us to call
  `hyper::server::conn::Connection::graceful_shutdown()` when the server
  is shut down. This allows those connections to communicate the socket
  shutdown at the application layer, rather than abruptly closing the
  socket.

* Propagate a shutdown signal throughout all the requests so we can
  interrupt blocking operations.

* Changed from Repository::on_drop to having Repository types have a
  shareable `dropped_signal` channel. This helps avoid cycles.

[2808]: https://github.com/hyperium/hyper/issues/2808

Original-Fixed: 98180

Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/669708
Original-Revision: 94bb9163dc4f211343883536e5c0afb614620bb5
GitOrigin-RevId: be4b959c3c831dec3dfd89ca681a69d1a3a7e4d8
Change-Id: Ib44c4ebe0b7980618e7280e2c3b5fddb7c85947e
1 file changed
tree: ad0da3517ea1c8abe48ff84905de75b24ec7be66
  1. infra/
  2. third_party/
  3. cts
  4. firmware
  5. flower
  6. jiri.lock
  7. minimal
  8. prebuilts
  9. README.md
  10. stem
  11. test_durations
  12. toolchain
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.