refactor: use tokio mpsc for controller/selector channel
Build binaries / Build (arm-musleabi) (push) Successful in 1m45s
Build binaries / Build (aarch64-musl) (push) Successful in 1m47s
Build binaries / Build (arm-musleabihf) (push) Successful in 1m54s
Build binaries / Build (armv7-musleabi) (push) Successful in 1m58s
Build binaries / Build (armv7-musleabihf) (push) Successful in 2m17s
Build binaries / Build (i686-musl) (push) Successful in 2m14s
Build binaries / Build (mips-musl) (push) Successful in 2m25s
Build binaries / Build (mips64-muslabi64) (push) Successful in 2m25s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 2m2s
Build binaries / Build (mipsel-musl) (push) Successful in 2m1s
Build binaries / Build (x86_64-musl) (push) Successful in 1m38s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m39s

This commit is contained in:
Nils Andreas Svee committed 2026-10-28 20:14:56 +07:00
1 parent fc8ace9b32
commit 22e6c05dc6
3 files changed
+9 -7

No files matched your search

+5 -4
View File
@@ -5,8 +5,9 @@ use std::{
time::Duration, time::Duration,
}; };
use flume::{Receiver, SendError, Sender}; use flume::{SendError, Sender};
use thiserror::Error; use thiserror::Error;
use tokio::sync::mpsc::UnboundedReceiver;
#[cfg(feature = "irtt")] #[cfg(feature = "irtt")]
use crate::measurement::irtt::IrttBinding; use crate::measurement::irtt::IrttBinding;
@@ -28,7 +29,7 @@ pub enum ControllerError {
} }
pub struct Controller { pub struct Controller {
reflector_rx: Receiver<Vec<SocketAddr>>, reflector_rx: UnboundedReceiver<Vec<SocketAddr>>,
icmp_binding_tx: Sender<Vec<IcmpBinding>>, icmp_binding_tx: Sender<Vec<IcmpBinding>>,
#[cfg(feature = "irtt")] #[cfg(feature = "irtt")]
irtt_binding_tx: Sender<Vec<IrttBinding>>, irtt_binding_tx: Sender<Vec<IrttBinding>>,
@@ -43,7 +44,7 @@ pub struct Controller {
impl Controller { impl Controller {
pub fn new( pub fn new(
reflector_rx: Receiver<Vec<SocketAddr>>, reflector_rx: UnboundedReceiver<Vec<SocketAddr>>,
icmp_binding_tx: Sender<Vec<IcmpBinding>>, icmp_binding_tx: Sender<Vec<IcmpBinding>>,
#[cfg(feature = "irtt")] irtt_binding_tx: Sender<Vec<IrttBinding>>, #[cfg(feature = "irtt")] irtt_binding_tx: Sender<Vec<IrttBinding>>,
reflectors: HashMap<SocketAddr, ReflectorDefinition>, reflectors: HashMap<SocketAddr, ReflectorDefinition>,
@@ -69,7 +70,7 @@ impl Controller {
pub async fn run(mut self, initial_reflectors: Vec<SocketAddr>) -> Result<(), ControllerError> { pub async fn run(mut self, initial_reflectors: Vec<SocketAddr>) -> Result<(), ControllerError> {
self.update_reflectors(initial_reflectors).await?; self.update_reflectors(initial_reflectors).await?;
while let Ok(reflectors) = self.reflector_rx.recv_async().await { while let Some(reflectors) = self.reflector_rx.recv().await {
self.update_reflectors(reflectors).await?; self.update_reflectors(reflectors).await?;
} }
Ok(()) Ok(())
+1 -1
View File
@@ -352,7 +352,7 @@ fn run(settings: &Settings) -> anyhow::Result<()> {
#[cfg(feature = "irtt")] #[cfg(feature = "irtt")]
let (irtt_binding_tx, irtt_binding_rx) = flume::unbounded(); let (irtt_binding_tx, irtt_binding_rx) = flume::unbounded();
let (measurement_tx, measurement_rx) = tokio::sync::mpsc::unbounded_channel(); let (measurement_tx, measurement_rx) = tokio::sync::mpsc::unbounded_channel();
let (reflector_tx, reflector_rx) = flume::unbounded(); let (reflector_tx, reflector_rx) = tokio::sync::mpsc::unbounded_channel();
let (reselect_tx, reselect_rx) = flume::bounded(1); let (reselect_tx, reselect_rx) = flume::bounded(1);
let (selection_snapshot_tx, selection_snapshot_rx) = if reselection_enabled { let (selection_snapshot_tx, selection_snapshot_rx) = if reselection_enabled {
let (tx, rx) = flume::unbounded(); let (tx, rx) = flume::unbounded();
+3 -2
View File
@@ -11,13 +11,14 @@ use crate::measurement::model::MeasurementStream;
use crate::metrics::{Metric, MetricsSender}; use crate::metrics::{Metric, MetricsSender};
use crate::settings::Settings; use crate::settings::Settings;
use crate::util::RwLockExt; use crate::util::RwLockExt;
use flume::{Receiver, RecvError, RecvTimeoutError, Selector, Sender}; use flume::{Receiver, RecvError, RecvTimeoutError, Selector};
use log::{debug, info}; use log::{debug, info};
use std::net::SocketAddr; use std::net::SocketAddr;
use std::sync::atomic::Ordering; use std::sync::atomic::Ordering;
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use std::thread::sleep; use std::thread::sleep;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use tokio::sync::mpsc::UnboundedSender;
enum SelectorEvent { enum SelectorEvent {
Trigger(Result<bool, RecvError>), Trigger(Result<bool, RecvError>),
@@ -115,7 +116,7 @@ pub struct ReflectorSelector {
pub settings: Settings, pub settings: Settings,
pub snapshot_rx: Receiver<ControlSnapshot>, pub snapshot_rx: Receiver<ControlSnapshot>,
pub reflector_peers_lock: Arc<RwLock<Vec<SocketAddr>>>, pub reflector_peers_lock: Arc<RwLock<Vec<SocketAddr>>>,
pub reflector_tx: Sender<Vec<SocketAddr>>, pub reflector_tx: UnboundedSender<Vec<SocketAddr>>,
pub reflector_pool: Vec<SocketAddr>, pub reflector_pool: Vec<SocketAddr>,
pub endpoint_streams: Arc<RwLock<std::collections::HashMap<SocketAddr, MeasurementStream>>>, pub endpoint_streams: Arc<RwLock<std::collections::HashMap<SocketAddr, MeasurementStream>>>,
pub trigger_channel: Receiver<bool>, pub trigger_channel: Receiver<bool>,