[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
This repository contains Fuchsia's Global Integration manifest files.
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.
First install Jiri.
Next run:
$ jiri init $ jiri import minimal https://fuchsia.googlesource.com/integration $ jiri update
Third party projects should have their own subdirectory in ./third_party.