Proof of Concept
diff --git a/miner-apps/translator/src/lib/sv1/sv1_server/mod.rs b/miner-apps/translator/src/lib/sv1/sv1_server/mod.rs
--- a/miner-apps/translator/src/lib/sv1/sv1_server/mod.rs
+++ b/miner-apps/translator/src/lib/sv1/sv1_server/mod.rs
@@ -1694,5 +1694,33 @@ mod tests {
let seq_id = server.sequence_counter.fetch_add(1, Ordering::SeqCst);
assert_eq!(seq_id, 1);
assert_eq!(server.sequence_counter.load(Ordering::SeqCst), 2);
}
+
+ #[test]
+ fn test_downstream_to_server_queue_applies_backpressure() {
+ use stratum_apps::stratum_core::sv1_api::json_rpc;
+
+ let server = create_test_sv1_server();
+ let message = json_rpc::Message::StandardRequest(json_rpc::StandardRequest {
+ id: 1,
+ method: "mining.subscribe".to_string(),
+ params: serde_json::Value::Null,
+ });
+
+ const N: usize = 50_000;
+ let accepted = (0..N)
+ .filter(|_| {
+ server
+ .sv1_server_io
+ .downstream_to_sv1_server_sender
+ .try_send((1, message.clone()))
+ .is_ok()
+ })
+ .count();
+
+ assert!(
+ accepted < N,
+ "downstream_to_sv1_server queue accepted all {accepted} messages without backpressure"
+ );
+ }
}
Proof of Concept