|
@@ -9,6 +9,7 @@ extern crate diesel;
|
|
use std::cmp;
|
|
use std::cmp;
|
|
use std::fmt::Write;
|
|
use std::fmt::Write;
|
|
use std::sync::Arc;
|
|
use std::sync::Arc;
|
|
|
|
+use std::thread::available_parallelism;
|
|
|
|
|
|
use anyhow::Error;
|
|
use anyhow::Error;
|
|
use diesel::prelude::*;
|
|
use diesel::prelude::*;
|
|
@@ -58,7 +59,7 @@ async fn world_row(res: &mut Response) -> Result<(), Error> {
|
|
|
|
|
|
#[fn_handler]
|
|
#[fn_handler]
|
|
async fn queries(req: &mut Request, res: &mut Response) -> Result<(), Error> {
|
|
async fn queries(req: &mut Request, res: &mut Response) -> Result<(), Error> {
|
|
- let count = req.get_query::<usize>("q").unwrap_or(1);
|
|
|
|
|
|
+ let count = req.query::<usize>("q").unwrap_or(1);
|
|
let count = cmp::min(500, cmp::max(1, count));
|
|
let count = cmp::min(500, cmp::max(1, count));
|
|
let mut worlds = Vec::with_capacity(count);
|
|
let mut worlds = Vec::with_capacity(count);
|
|
let mut rng = SmallRng::from_entropy();
|
|
let mut rng = SmallRng::from_entropy();
|
|
@@ -75,7 +76,7 @@ async fn queries(req: &mut Request, res: &mut Response) -> Result<(), Error> {
|
|
|
|
|
|
#[fn_handler]
|
|
#[fn_handler]
|
|
async fn cached_queries(req: &mut Request, res: &mut Response) -> Result<(), Error> {
|
|
async fn cached_queries(req: &mut Request, res: &mut Response) -> Result<(), Error> {
|
|
- let count = req.get_query::<usize>("q").unwrap_or(1);
|
|
|
|
|
|
+ let count = req.query::<usize>("q").unwrap_or(1);
|
|
let count = cmp::min(500, cmp::max(1, count));
|
|
let count = cmp::min(500, cmp::max(1, count));
|
|
let mut worlds = Vec::with_capacity(count);
|
|
let mut worlds = Vec::with_capacity(count);
|
|
let mut rng = SmallRng::from_entropy();
|
|
let mut rng = SmallRng::from_entropy();
|
|
@@ -93,7 +94,7 @@ async fn cached_queries(req: &mut Request, res: &mut Response) -> Result<(), Err
|
|
|
|
|
|
#[fn_handler]
|
|
#[fn_handler]
|
|
async fn updates(req: &mut Request, res: &mut Response) -> Result<(), Error> {
|
|
async fn updates(req: &mut Request, res: &mut Response) -> Result<(), Error> {
|
|
- let count = req.get_query::<usize>("q").unwrap_or(1);
|
|
|
|
|
|
+ let count = req.query::<usize>("q").unwrap_or(1);
|
|
let count = cmp::min(500, cmp::max(1, count));
|
|
let count = cmp::min(500, cmp::max(1, count));
|
|
let conn = connect()?;
|
|
let conn = connect()?;
|
|
let mut worlds = Vec::with_capacity(count);
|
|
let mut worlds = Vec::with_capacity(count);
|
|
@@ -176,12 +177,12 @@ fn main() {
|
|
.push(Router::with_path("cached_queries").get(cached_queries))
|
|
.push(Router::with_path("cached_queries").get(cached_queries))
|
|
.push(Router::with_path("updates").get(updates)),
|
|
.push(Router::with_path("updates").get(updates)),
|
|
);
|
|
);
|
|
- let cpus = num_cpus::get();
|
|
|
|
|
|
+ let size = available_parallelism().map(|n| n.get()).unwrap_or(16);
|
|
DB_POOL
|
|
DB_POOL
|
|
- .set(build_pool(&DB_URL, cpus as u32).expect(&format!("Error connecting to {}", &DB_URL)))
|
|
|
|
|
|
+ .set(build_pool(&DB_URL, size as u32).expect(&format!("Error connecting to {}", &DB_URL)))
|
|
.ok();
|
|
.ok();
|
|
populate_cache().expect("error cache worlds");
|
|
populate_cache().expect("error cache worlds");
|
|
- for _ in 1..cpus {
|
|
|
|
|
|
+ for _ in 1..size {
|
|
let router = router.clone();
|
|
let router = router.clone();
|
|
std::thread::spawn(move || {
|
|
std::thread::spawn(move || {
|
|
let rt = tokio::runtime::Builder::new_current_thread()
|
|
let rt = tokio::runtime::Builder::new_current_thread()
|
|
@@ -191,6 +192,7 @@ fn main() {
|
|
rt.block_on(serve(router));
|
|
rt.block_on(serve(router));
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
+ println!("Starting http server: 127.0.0.1:8080");
|
|
let rt = tokio::runtime::Builder::new_current_thread()
|
|
let rt = tokio::runtime::Builder::new_current_thread()
|
|
.enable_all()
|
|
.enable_all()
|
|
.build()
|
|
.build()
|
|
@@ -199,6 +201,5 @@ fn main() {
|
|
}
|
|
}
|
|
|
|
|
|
async fn serve(router: Arc<Router>) {
|
|
async fn serve(router: Arc<Router>) {
|
|
- println!("Starting http server: 127.0.0.1:8080");
|
|
|
|
server::builder().serve(Service::new(router)).await.unwrap();
|
|
server::builder().serve(Service::new(router)).await.unwrap();
|
|
}
|
|
}
|