Skip to content

Commit 1f03538

Browse files
refactor(iroh): avoid storing the TransportsSender
Closes #3641
1 parent 8d56889 commit 1f03538

File tree

4 files changed

+14
-16
lines changed

4 files changed

+14
-16
lines changed

iroh/src/magicsock.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,6 @@ impl Handle {
850850
secret_key.public(),
851851
metrics.magicsock.clone(),
852852
direct_addrs.addrs.watch(),
853-
transports.create_sender(),
854853
discovery.clone(),
855854
)
856855
};

iroh/src/magicsock/remote_map.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use self::remote_state::{RemoteStateActor, RemoteStateHandle};
1818
use super::{
1919
DirectAddr, MagicsockMetrics,
2020
mapped_addrs::{AddrMap, EndpointIdMappedAddr, RelayMappedAddr},
21-
transports::TransportsSender,
2221
};
2322
use crate::discovery::ConcurrentDiscovery;
2423

@@ -58,7 +57,6 @@ pub(crate) struct RemoteMap {
5857
metrics: Arc<MagicsockMetrics>,
5958
/// The "direct" addresses known for our local endpoint
6059
local_direct_addrs: n0_watcher::Direct<BTreeSet<DirectAddr>>,
61-
sender: TransportsSender,
6260
discovery: ConcurrentDiscovery,
6361
}
6462

@@ -68,7 +66,6 @@ impl RemoteMap {
6866
local_endpoint_id: EndpointId,
6967
metrics: Arc<MagicsockMetrics>,
7068
local_direct_addrs: n0_watcher::Direct<BTreeSet<DirectAddr>>,
71-
sender: TransportsSender,
7269
discovery: ConcurrentDiscovery,
7370
) -> Self {
7471
Self {
@@ -78,7 +75,6 @@ impl RemoteMap {
7875
local_endpoint_id,
7976
metrics,
8077
local_direct_addrs,
81-
sender,
8278
discovery,
8379
}
8480
}
@@ -137,7 +133,6 @@ impl RemoteMap {
137133
self.local_direct_addrs.clone(),
138134
self.relay_mapped_addrs.clone(),
139135
self.metrics.clone(),
140-
self.sender.clone(),
141136
self.discovery.clone(),
142137
)
143138
.start();

iroh/src/magicsock/remote_map/remote_state.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ pub(super) struct RemoteStateActor {
140140
//
141141
/// Metrics.
142142
metrics: Arc<MagicsockMetrics>,
143-
sender: TransportsSender,
144143
/// Our local addresses.
145144
///
146145
/// These are our local addresses and any reflexive transport addresses.
@@ -202,7 +201,6 @@ impl RemoteStateActor {
202201
local_direct_addrs: n0_watcher::Direct<BTreeSet<DirectAddr>>,
203202
relay_mapped_addrs: AddrMap<(RelayUrl, EndpointId), RelayMappedAddr>,
204203
metrics: Arc<MagicsockMetrics>,
205-
sender: TransportsSender,
206204
discovery: ConcurrentDiscovery,
207205
) -> Self {
208206
Self {
@@ -222,7 +220,6 @@ impl RemoteStateActor {
222220
scheduled_holepunch: None,
223221
scheduled_open_path: None,
224222
pending_open_paths: VecDeque::new(),
225-
sender,
226223
discovery_stream: Either::Left(n0_future::stream::pending()),
227224
}
228225
}
@@ -342,8 +339,8 @@ impl RemoteStateActor {
342339
async fn handle_message(&mut self, msg: RemoteStateMessage) {
343340
// trace!("handling message");
344341
match msg {
345-
RemoteStateMessage::SendDatagram(transmit) => {
346-
self.handle_msg_send_datagram(transmit).await;
342+
RemoteStateMessage::SendDatagram(sender, transmit) => {
343+
self.handle_msg_send_datagram(sender, transmit).await;
347344
}
348345
RemoteStateMessage::AddConnection(handle, tx) => {
349346
self.handle_msg_add_connection(handle, tx).await;
@@ -358,7 +355,11 @@ impl RemoteStateActor {
358355
}
359356

360357
/// Handles [`RemoteStateMessage::SendDatagram`].
361-
async fn handle_msg_send_datagram(&mut self, transmit: OwnedTransmit) {
358+
async fn handle_msg_send_datagram(
359+
&mut self,
360+
mut sender: TransportsSender,
361+
transmit: OwnedTransmit,
362+
) {
362363
// Sending datagrams might fail, e.g. because we don't have the right transports set
363364
// up to handle sending this owned transmit to.
364365
// After all, we try every single path that we know (relay URL, IP address), even
@@ -368,7 +369,7 @@ impl RemoteStateActor {
368369
if let Some(addr) = self.selected_path.get() {
369370
trace!(?addr, "sending datagram to selected path");
370371

371-
if let Err(err) = send_datagram(&mut self.sender, addr.clone(), transmit).await {
372+
if let Err(err) = send_datagram(&mut sender, addr.clone(), transmit).await {
372373
debug!(?addr, "failed to send datagram on selected_path: {err:#}");
373374
}
374375
} else {
@@ -392,7 +393,7 @@ impl RemoteStateActor {
392393
{
393394
trace!(%sockaddr, "not sending datagram to our own address");
394395
} else if let Err(err) =
395-
send_datagram(&mut self.sender, addr.clone(), transmit.clone()).await
396+
send_datagram(&mut sender, addr.clone(), transmit.clone()).await
396397
{
397398
debug!(?addr, "failed to send datagram: {err:#}");
398399
}
@@ -996,7 +997,7 @@ pub(crate) enum RemoteStateMessage {
996997
/// operation with a bunch more copying. So it should only be used for sending QUIC
997998
/// Initial packets.
998999
#[debug("SendDatagram(..)")]
999-
SendDatagram(OwnedTransmit),
1000+
SendDatagram(TransportsSender, OwnedTransmit),
10001001
/// Adds an active connection to this remote endpoint.
10011002
///
10021003
/// The connection will now be managed by this actor. Holepunching will happen when

iroh/src/magicsock/transports.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,10 @@ impl quinn::UdpSender for MagicSender {
693693

694694
let sender = self.msock.remote_map.remote_state_actor(node_id);
695695
let transmit = OwnedTransmit::from(quinn_transmit);
696-
return match sender.try_send(RemoteStateMessage::SendDatagram(transmit)) {
696+
return match sender.try_send(RemoteStateMessage::SendDatagram(
697+
self.sender.clone(),
698+
transmit,
699+
)) {
697700
Ok(()) => {
698701
trace!(dst = ?mapped_addr, dst_node = %node_id.fmt_short(), "sent transmit");
699702
Poll::Ready(Ok(()))

0 commit comments

Comments
 (0)