From 3986c0ec92184dd85331646893d7191a0173e0f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Fri, 5 Nov 2021 11:27:51 +0100 Subject: [PATCH 1/3] ws: don't panic when ConnectionWriter can't recv from closed channel --- aquatic_ws/src/lib/network.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/aquatic_ws/src/lib/network.rs b/aquatic_ws/src/lib/network.rs index f4e71ca..55ad023 100644 --- a/aquatic_ws/src/lib/network.rs +++ b/aquatic_ws/src/lib/network.rs @@ -378,11 +378,9 @@ struct ConnectionWriter { impl ConnectionWriter { async fn run_out_message_loop(&mut self) -> anyhow::Result<()> { loop { - let (meta, out_message) = self - .out_message_receiver - .recv() - .await - .expect("wait_for_out_message: can't receive out_message, sender is closed"); + let (meta, out_message) = self.out_message_receiver.recv().await.ok_or_else(|| { + anyhow::anyhow!("ConnectionWriter couldn't receive message, sender is closed") + })?; if meta.naive_peer_addr != self.peer_addr { return Err(anyhow::anyhow!("peer addresses didn't match")); From 41a249459c5426003d8b6406bd817d4a18243060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Fri, 5 Nov 2021 11:50:58 +0100 Subject: [PATCH 2/3] aquatic_udp: glommio: await send/recv on shared channels --- aquatic_udp/src/lib/glommio/handlers.rs | 4 ++-- aquatic_udp/src/lib/glommio/network.rs | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aquatic_udp/src/lib/glommio/handlers.rs b/aquatic_udp/src/lib/glommio/handlers.rs index fbfbcb2..862710f 100644 --- a/aquatic_udp/src/lib/glommio/handlers.rs +++ b/aquatic_udp/src/lib/glommio/handlers.rs @@ -105,8 +105,8 @@ async fn handle_request_stream( ::log::debug!("preparing to send response to channel: {:?}", response); - if let Err(err) = response_senders.try_send_to(producer_index, (response, src)) { - ::log::warn!("response_sender.try_send: {:?}", err); + if let Err(err) = response_senders.send_to(producer_index, (response, src)).await { + ::log::error!("response_sender.send: {:?}", err); } yield_if_needed().await; diff --git a/aquatic_udp/src/lib/glommio/network.rs b/aquatic_udp/src/lib/glommio/network.rs index a32917a..c42ea57 100644 --- a/aquatic_udp/src/lib/glommio/network.rs +++ b/aquatic_udp/src/lib/glommio/network.rs @@ -240,15 +240,15 @@ async fn read_requests( let request_consumer_index = calculate_request_consumer_index(&config, request.info_hash); - if let Err(err) = request_senders.try_send_to( + if let Err(err) = request_senders.send_to( request_consumer_index, ( response_consumer_index, ConnectedRequest::Announce(request), src, ), - ) { - ::log::warn!("request_sender.try_send failed: {:?}", err) + ).await { + ::log::error!("request_sender.try_send failed: {:?}", err) } } else { let response = Response::Error(ErrorResponse { @@ -300,11 +300,11 @@ async fn read_requests( original_indices, }; - if let Err(err) = request_senders.try_send_to( + if let Err(err) = request_senders.send_to( consumer_index, (response_consumer_index, request, src), - ) { - ::log::warn!("request_sender.try_send failed: {:?}", err) + ).await { + ::log::error!("request_sender.send failed: {:?}", err) } } } From 8531e12d0ec20966837feba71c977bf988f4849c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Fri, 5 Nov 2021 11:57:26 +0100 Subject: [PATCH 3/3] README: mention ws glommio performance regressions, link to old commit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 5b317aa..a789f9f 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,10 @@ clients, with some exceptions: * Doesn't track of the number of torrent downloads (0 is always sent). * Doesn't allow full scrapes, i.e. of all registered info hashes +The current glommio-based implementation currently has large performance +regressions compared to [the previous mio-based implementation](https://github.com/greatest-ape/aquatic/tree/30fa96a7f43eb7568b7df1e1fdb6e1885f3b4f58). +Use it instead if you want maximum performance now. + #### TLS Please see `aquatic_http` TLS section above.