debug: add datagram receive + multi-hop forward error logging
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) <noreply@anthropic.com>
This commit is contained in:
@@ -347,13 +347,22 @@ async fn run_federation_link(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let peer_label_media = peer_label.clone();
|
||||||
let media_task = async move {
|
let media_task = async move {
|
||||||
|
let mut media_count: u64 = 0;
|
||||||
loop {
|
loop {
|
||||||
match media_transport.connection().read_datagram().await {
|
match media_transport.connection().read_datagram().await {
|
||||||
Ok(data) => {
|
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;
|
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());
|
let mut tagged = Vec::with_capacity(8 + media_bytes.len());
|
||||||
tagged.extend_from_slice(&rh);
|
tagged.extend_from_slice(&rh);
|
||||||
tagged.extend_from_slice(&media_bytes);
|
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}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user