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
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:
3 files changed
+9
-7
No files matched your search
+5
-4
@@ -5,8 +5,9 @@ use std::{
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
use flume::{Receiver, SendError, Sender};
|
||||
use flume::{SendError, Sender};
|
||||
use thiserror::Error;
|
||||
use tokio::sync::mpsc::UnboundedReceiver;
|
||||
|
||||
#[cfg(feature = "irtt")]
|
||||
use crate::measurement::irtt::IrttBinding;
|
||||
@@ -28,7 +29,7 @@ pub enum ControllerError {
|
||||
}
|
||||
|
||||
pub struct Controller {
|
||||
reflector_rx: Receiver<Vec<SocketAddr>>,
|
||||
reflector_rx: UnboundedReceiver<Vec<SocketAddr>>,
|
||||
icmp_binding_tx: Sender<Vec<IcmpBinding>>,
|
||||
#[cfg(feature = "irtt")]
|
||||
irtt_binding_tx: Sender<Vec<IrttBinding>>,
|
||||
@@ -43,7 +44,7 @@ pub struct Controller {
|
||||
|
||||
impl Controller {
|
||||
pub fn new(
|
||||
reflector_rx: Receiver<Vec<SocketAddr>>,
|
||||
reflector_rx: UnboundedReceiver<Vec<SocketAddr>>,
|
||||
icmp_binding_tx: Sender<Vec<IcmpBinding>>,
|
||||
#[cfg(feature = "irtt")] irtt_binding_tx: Sender<Vec<IrttBinding>>,
|
||||
reflectors: HashMap<SocketAddr, ReflectorDefinition>,
|
||||
@@ -69,7 +70,7 @@ impl Controller {
|
||||
|
||||
pub async fn run(mut self, initial_reflectors: Vec<SocketAddr>) -> Result<(), ControllerError> {
|
||||
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?;
|
||||
}
|
||||
Ok(())
|
||||
|
||||
+1
-1
@@ -352,7 +352,7 @@ fn run(settings: &Settings) -> anyhow::Result<()> {
|
||||
#[cfg(feature = "irtt")]
|
||||
let (irtt_binding_tx, irtt_binding_rx) = flume::unbounded();
|
||||
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 (selection_snapshot_tx, selection_snapshot_rx) = if reselection_enabled {
|
||||
let (tx, rx) = flume::unbounded();
|
||||
|
||||
@@ -11,13 +11,14 @@ use crate::measurement::model::MeasurementStream;
|
||||
use crate::metrics::{Metric, MetricsSender};
|
||||
use crate::settings::Settings;
|
||||
use crate::util::RwLockExt;
|
||||
use flume::{Receiver, RecvError, RecvTimeoutError, Selector, Sender};
|
||||
use flume::{Receiver, RecvError, RecvTimeoutError, Selector};
|
||||
use log::{debug, info};
|
||||
use std::net::SocketAddr;
|
||||
use std::sync::atomic::Ordering;
|
||||
use std::sync::{Arc, RwLock};
|
||||
use std::thread::sleep;
|
||||
use std::time::{Duration, Instant};
|
||||
use tokio::sync::mpsc::UnboundedSender;
|
||||
|
||||
enum SelectorEvent {
|
||||
Trigger(Result<bool, RecvError>),
|
||||
@@ -115,7 +116,7 @@ pub struct ReflectorSelector {
|
||||
pub settings: Settings,
|
||||
pub snapshot_rx: Receiver<ControlSnapshot>,
|
||||
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 endpoint_streams: Arc<RwLock<std::collections::HashMap<SocketAddr, MeasurementStream>>>,
|
||||
pub trigger_channel: Receiver<bool>,
|
||||
|
||||
Reference in new issue
Block a user