Removed futures dependency, migrated to tokio::sync::mpsc .

closed #45
This commit is contained in:
Ara Sadoyan
2026-06-30 12:27:49 +02:00
parent 874ce4fddb
commit 9a1e8fe149
8 changed files with 13 additions and 29 deletions
+3 -4
View File
@@ -8,18 +8,17 @@ use crate::web::logging::init_logging;
use crate::web::proxyhttp::LB;
use async_trait::async_trait;
use dashmap::DashMap;
use futures::channel::mpsc;
use futures::{SinkExt, StreamExt};
use log::{error, info};
use pingora_core::server::ShutdownWatch;
use pingora_core::services::background::BackgroundService;
use std::sync::Arc;
use tokio::sync::mpsc;
#[async_trait]
impl BackgroundService for LB {
async fn start(&self, mut shutdown: ShutdownWatch) {
info!("Starting background service"); // tx: Sender<Configuration>
let (mut tx, mut rx) = mpsc::channel::<Configuration>(1);
let (tx, mut rx) = mpsc::channel::<Configuration>(1);
let tx_api = tx.clone();
let config = load_configuration(self.config.upstreams_conf.clone().as_str(), "filepath")
.await
@@ -84,7 +83,7 @@ impl BackgroundService for LB {
_ = shutdown.changed() => {
break;
}
val = rx.next() => {
val = rx.recv() => {
if let Some(ss) = val {
clone_dashmap_into(&ss.upstreams, &self.ump_full);
clone_dashmap_into(&ss.upstreams, &self.ump_upst);
+3 -5
View File
@@ -10,8 +10,6 @@ use axum::http::{Response, StatusCode};
use axum::response::IntoResponse;
use axum::routing::{any, get, post};
use axum::{Json, Router};
use futures::channel::mpsc::Sender;
use futures::SinkExt;
use jsonwebtoken::{encode, EncodingKey, Header};
use log::{debug, error, info, warn};
use prometheus::{gather, Encoder, TextEncoder};
@@ -37,14 +35,14 @@ pub(crate) struct AppState {
pub(crate) cert_creds: String,
pub(crate) certs_dir: String,
upstreams_file: String,
config_sender: Sender<Configuration>,
config_sender: mpsc::Sender<Configuration>,
config_api_enabled: bool,
current_upstreams: Arc<UpstreamsDashMap>,
full_upstreams: Arc<UpstreamsDashMap>,
}
#[allow(unused_mut)]
pub async fn run_server(config: &APIUpstreamProvider, mut to_return: Sender<Configuration>, upstreams_curr: Arc<UpstreamsDashMap>, upstreams_full: Arc<UpstreamsDashMap>) {
pub async fn run_server(config: &APIUpstreamProvider, mut to_return: mpsc::Sender<Configuration>, upstreams_curr: Arc<UpstreamsDashMap>, upstreams_full: Arc<UpstreamsDashMap>) {
let credsfile = config.config_dir.clone() + "/acme_credentials.json";
let app_state = AppState {
master_key: config.masterkey.clone(),
@@ -119,7 +117,7 @@ async fn conf(State(st): State<AppState>, Query(params): Query<HashMap<String, S
}
}
async fn apply_config(content: &str, mut st: AppState, save: bool) {
async fn apply_config(content: &str, st: AppState, save: bool) {
let sl = crate::utils::parceyaml::load_configuration(content, "content").await;
if let Some(serverlist) = sl.0 {
if save {