From 14cd5d68a9335bc8a1eb530777076e4bd7e80b48 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 17 Aug 2022 15:11:11 +0900 Subject: [PATCH] clippy.toml: Create and disallow unbounded channels When using channels (e.g. `futures::channel::mpsc` or `std::sync::mpsc`) always use the bounded variant, never use the unbounded variant. When using a bounded channel, a slow consumer eventually slows down a fast producer once the channel bound is reached, ideally granting the slow consumer more system resources e.g. CPU time, keeping queues small and thus latencies low. When using an unbounded channel a fast producer continues being a fast producer, growing the channel buffer indefinitely, increasing latency until the illusion of unboundedness breaks and the system runs out of memory. One may use an unbounded channel if one enforces backpressure through an out-of-band mechanism, e.g. the consumer granting the producer send-tokens through a side-channel. See also https://github.com/libp2p/rust-libp2p/pull/2780#discussion_r931988617 --- clippy.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 clippy.toml diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 000000000000..734ddb680da0 --- /dev/null +++ b/clippy.toml @@ -0,0 +1,3 @@ +disallowed-methods = [ + { path = "futures::sync::mpsc::channel", reason = "does not enforce backpressure" }, +] \ No newline at end of file