From 1d2222a25ae6bcc9b94f463d8f15b1351832c73f Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Wed, 8 Apr 2026 08:45:54 +0400 Subject: [PATCH] debug: add datagram receive + multi-hop forward error logging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added logging to trace federation media flow: - media_task logs first + every 250th received datagram (count, len) - handle_datagram multi-hop forward logs errors (was silently dropped) - forward_to_peers logs when no peer matches 2-relay (A→B): WORKING — full audio received, 300 packets forwarded 3-relay (A→B→C): B receives datagrams from A but only 1 arrives — remaining packets not received, likely a QUIC read_datagram issue when handle_datagram holds locks during processing. Needs further investigation into async lock contention or datagram buffering. Co-Authored-By: Claude Opus 4.6 (1M context) --- crates/wzp-relay/src/federation.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/crates/wzp-relay/src/federation.rs b/crates/wzp-relay/src/federation.rs index d66d155..e7b740a 100644 --- a/crates/wzp-relay/src/federation.rs +++ b/crates/wzp-relay/src/federation.rs @@ -347,13 +347,22 @@ async fn run_federation_link( } }; + let peer_label_media = peer_label.clone(); let media_task = async move { + let mut media_count: u64 = 0; loop { match media_transport.connection().read_datagram().await { Ok(data) => { + media_count += 1; + if media_count == 1 || media_count % 250 == 0 { + info!(peer = %peer_label_media, media_count, len = data.len(), "federation: received datagram"); + } handle_datagram(&fm_media, &peer_fp_media, data).await; } - Err(_) => break, + Err(e) => { + info!(peer = %peer_label_media, "federation media task ended: {e}"); + break; + } } } }; @@ -469,7 +478,9 @@ async fn handle_datagram( let mut tagged = Vec::with_capacity(8 + media_bytes.len()); tagged.extend_from_slice(&rh); tagged.extend_from_slice(&media_bytes); - let _ = link.transport.send_raw_datagram(&tagged); + if let Err(e) = link.transport.send_raw_datagram(&tagged) { + warn!(peer = %link.label, "multi-hop forward error: {e}"); + } } } }