Repository navigation
refactor: Reply to HTTP handlers without holding a tokio worker - #84
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reply to HTTP handlers without holding a tokio worker
Why
A handler waited for a media loop's reply with a blocking
recv()and sent its request with a blockingsend(). Both held a tokio worker: the first for up to one lap, the second for as long as the loop's channel stayed full. ADR 0007 deferred this on the belief thattokio::syncchannels need a runtime on the loop's side. They do not.Changes
Replies
tokio::sync::oneshot, and the handler awaits it.tokio::sync::mpscwith one sender per loop. The handler takes the first room id and answers401once every loop has said no.Requests
sync_channel. A handler sends withtry_sendand answers503when the channel is full. The channel also carries media from the mux, and media cannot wait while a request can be retried.503, not401, if any loop is full, since the key may belong to that loop.stream_requests_refusedcounts refusals, with a panel on the Grafana dashboard. They are not logged, since they come in floods.Docs
Tested
cargo test: unit tests inroom.rsupdated for the new reply types; the integration suites pass unchanged.Closes #82