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. 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) } } } 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"));