diff --git a/src/main.rs b/src/main.rs index 93715f4..7b78e5b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -60,7 +60,7 @@ mod sharding; mod stats; use config::{get_config, reload_config}; -use pool::{get_pool, ClientServerMap, ConnectionPool}; +use pool::{ClientServerMap, ConnectionPool}; use stats::{Collector, Reporter, REPORTER}; #[tokio::main(worker_threads = 4)] @@ -120,8 +120,6 @@ async fn main() { } }; - let pool = get_pool(); - // Statistics collector task. let collector_tx = tx.clone(); @@ -129,16 +127,13 @@ async fn main() { let reload_client_server_map = client_server_map.clone(); let autoreload_client_server_map = client_server_map.clone(); - let addresses = pool.databases(); tokio::task::spawn(async move { let mut stats_collector = Collector::new(rx, collector_tx); - stats_collector.collect(addresses).await; + stats_collector.collect().await; }); info!("Waiting for clients"); - drop(pool); - // Client connection loop. tokio::task::spawn(async move { loop { diff --git a/src/stats.rs b/src/stats.rs index 7454c58..59a03dc 100644 --- a/src/stats.rs +++ b/src/stats.rs @@ -6,6 +6,8 @@ use parking_lot::Mutex; use std::collections::HashMap; use tokio::sync::mpsc::{channel, Receiver, Sender}; +use crate::pool::get_pool; + pub static REPORTER: Lazy> = Lazy::new(|| ArcSwap::from_pointee(Reporter::default())); @@ -285,7 +287,7 @@ impl Collector { /// The statistics collection handler. It will collect statistics /// for `address_id`s starting at 0 up to `addresses`. - pub async fn collect(&mut self, addresses: usize) { + pub async fn collect(&mut self) { info!("Events reporter started"); let stats_template = HashMap::from([ @@ -329,6 +331,7 @@ impl Collector { tokio::time::interval(tokio::time::Duration::from_millis(STAT_PERIOD / 15)); loop { interval.tick().await; + let addresses = get_pool().databases(); for address_id in 0..addresses { let _ = tx.try_send(Event { name: EventName::UpdateStats, @@ -346,6 +349,7 @@ impl Collector { tokio::time::interval(tokio::time::Duration::from_millis(STAT_PERIOD)); loop { interval.tick().await; + let addresses = get_pool().databases(); for address_id in 0..addresses { let _ = tx.try_send(Event { name: EventName::UpdateAverages,