server main: replace db_pool_index Mutex with AtomicUsize
This commit is contained in:
parent
2402721226
commit
ebf76784e7
|
@ -4,7 +4,7 @@
|
|||
extern crate gotham_derive;
|
||||
|
||||
use core::f64::consts::PI;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::{Arc, atomic::{AtomicUsize, Ordering}, Mutex};
|
||||
use gotham::{
|
||||
handler::assets::FileOptions,
|
||||
router::builder::{DefineSingleRoute, DrawRoutes},
|
||||
|
@ -24,18 +24,21 @@ mod tiles;
|
|||
#[derive(Clone, StateData)]
|
||||
pub struct AppState {
|
||||
pub db_pool: Vec<Arc<Mutex<postgres::Client>>>,
|
||||
pub db_pool_index: Arc<Mutex<usize>>,
|
||||
pub db_pool_index: Arc<AtomicUsize>,
|
||||
}
|
||||
|
||||
impl AppState {
|
||||
pub fn with_db<F: Fn(&mut postgres::Client) -> R, R>(&self, f: F) -> R {
|
||||
let mut db_pool_index = self.db_pool_index.lock().unwrap();
|
||||
let mut db = self.db_pool[*db_pool_index].lock().unwrap();
|
||||
|
||||
*db_pool_index += 1;
|
||||
if *db_pool_index >= self.db_pool.len() {
|
||||
*db_pool_index = 0;
|
||||
}
|
||||
let db_pool_len = self.db_pool.len();
|
||||
let db_pool_index = self.db_pool_index.fetch_update(
|
||||
Ordering::SeqCst, Ordering::SeqCst, |mut db_pool_index| {
|
||||
db_pool_index += 1;
|
||||
if db_pool_index >= db_pool_len {
|
||||
db_pool_index = 0;
|
||||
}
|
||||
Some(db_pool_index)
|
||||
}).unwrap();
|
||||
let mut db = self.db_pool[db_pool_index].lock().unwrap();
|
||||
|
||||
f(&mut db)
|
||||
}
|
||||
|
@ -136,7 +139,7 @@ fn main() {
|
|||
|
||||
let state = AppState {
|
||||
db_pool,
|
||||
db_pool_index: Arc::new(Mutex::new(0)),
|
||||
db_pool_index: Arc::new(AtomicUsize::new(0)),
|
||||
};
|
||||
let (chain, pipelines) = single_pipeline(
|
||||
single_middleware(
|
||||
|
|
Loading…
Reference in New Issue