From 6eb50c1169eb6cef20bc0d311ccdeb8777791372 Mon Sep 17 00:00:00 2001 From: zonyitoo Date: Fri, 26 Apr 2019 09:08:45 +0800 Subject: [PATCH] Print log when switching server --- src/relay/loadbalancing/server/ping.rs | 28 +++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/relay/loadbalancing/server/ping.rs b/src/relay/loadbalancing/server/ping.rs index 19ef3fd2..366cb587 100644 --- a/src/relay/loadbalancing/server/ping.rs +++ b/src/relay/loadbalancing/server/ping.rs @@ -14,7 +14,7 @@ use crate::{ }; use futures::{Future, Stream}; -use log::{debug, error}; +use log::{debug, error, info}; use tokio::{ self, timer::{Interval, Timeout}, @@ -150,6 +150,18 @@ impl Inner { } }) } + + fn best_idx(&self) -> usize { + self.best_idx.load(Ordering::Acquire) + } + + fn set_best_idx(&self, idx: usize) { + self.best_idx.store(idx, Ordering::Release) + } + + fn best_server(&self) -> &Arc { + &self.servers[self.best_idx()] + } } #[derive(Clone)] @@ -200,7 +212,15 @@ impl PingBalancer { ); } - inner.best_idx.store(svr_idx, Ordering::Release); + if inner.best_idx() != svr_idx { + info!( + "switched server from {} to {}", + inner.best_server().config.addr(), + choosen_svr.config.addr() + ); + } + + inner.set_best_idx(svr_idx); Ok(()) }) @@ -216,9 +236,7 @@ impl LoadBalancer for PingBalancer { if self.inner.servers.is_empty() { panic!("no server in configuration"); } - - let idx = self.inner.best_idx.load(Ordering::Acquire); - self.inner.servers[idx].config.clone() + self.inner.best_server().config.clone() } fn total(&self) -> usize {