mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-28 01:32:57 +01:00
Allow to configure StaticFiles CpuPool, via static method or env variable
This commit is contained in:
parent
634c5723a0
commit
a9ea649348
@ -3,6 +3,8 @@
|
||||
|
||||
## 0.5.2 (2018-04-xx)
|
||||
|
||||
* Allow to configure StaticFiles's CpuPool, via static method or env variable
|
||||
|
||||
* Add support for custom handling of Json extractor errors #181
|
||||
|
||||
* Fix StaticFiles does not support percent encoded paths #177
|
||||
|
@ -568,7 +568,7 @@ impl<T> InternalError<T> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Create `InternalError` with predefined `HttpResponse`
|
||||
/// Create `InternalError` with predefined `HttpResponse`.
|
||||
pub fn from_response(cause: T, response: HttpResponse) -> Self {
|
||||
InternalError {
|
||||
cause,
|
||||
|
35
src/fs.rs
35
src/fs.rs
@ -6,7 +6,7 @@ use std::ops::{Deref, DerefMut};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::Mutex;
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
use std::{cmp, io};
|
||||
use std::{cmp, env, io};
|
||||
|
||||
#[cfg(unix)]
|
||||
use std::os::unix::fs::MetadataExt;
|
||||
@ -26,6 +26,9 @@ use httprequest::HttpRequest;
|
||||
use httpresponse::HttpResponse;
|
||||
use param::FromParam;
|
||||
|
||||
/// Env variable for default cpu pool size for `StaticFiles`
|
||||
const ENV_CPU_POOL_VAR: &str = "ACTIX_FS_POOL";
|
||||
|
||||
/// A file with an associated name; responds with the Content-Type based on the
|
||||
/// file extension.
|
||||
#[derive(Debug)]
|
||||
@ -445,12 +448,37 @@ pub struct StaticFiles<S> {
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
static ref DEFAULT_CPUPOOL: Mutex<CpuPool> = Mutex::new(CpuPool::new(20));
|
||||
static ref DEFAULT_CPUPOOL: Mutex<CpuPool> = {
|
||||
let default = match env::var(ENV_CPU_POOL_VAR) {
|
||||
Ok(val) => {
|
||||
if let Ok(val) = val.parse() {
|
||||
val
|
||||
} else {
|
||||
error!("Can not parse ACTIX_FS_POOL value");
|
||||
20
|
||||
}
|
||||
},
|
||||
Err(_) => 20,
|
||||
};
|
||||
Mutex::new(CpuPool::new(default))
|
||||
};
|
||||
}
|
||||
|
||||
impl<S: 'static> StaticFiles<S> {
|
||||
/// Create new `StaticFiles` instance for specified base directory.
|
||||
///
|
||||
/// `StaticFile` uses `CpuPool` for blocking filesystem operations.
|
||||
/// By default pool with 20 threads is used.
|
||||
/// Pool size can be changed by setting ACTIX_FS_POOL environment variable.
|
||||
pub fn new<T: Into<PathBuf>>(dir: T) -> StaticFiles<S> {
|
||||
// use default CpuPool
|
||||
let pool = { DEFAULT_CPUPOOL.lock().unwrap().clone() };
|
||||
|
||||
StaticFiles::with_pool(dir, pool)
|
||||
}
|
||||
|
||||
/// Create new `StaticFiles` instance for specified base directory and `CpuPool`.
|
||||
pub fn with_pool<T: Into<PathBuf>>(dir: T, pool: CpuPool) -> StaticFiles<S> {
|
||||
let dir = dir.into();
|
||||
|
||||
let (dir, access) = match dir.canonicalize() {
|
||||
@ -468,9 +496,6 @@ impl<S: 'static> StaticFiles<S> {
|
||||
}
|
||||
};
|
||||
|
||||
// use default CpuPool
|
||||
let pool = { DEFAULT_CPUPOOL.lock().unwrap().clone() };
|
||||
|
||||
StaticFiles {
|
||||
directory: dir,
|
||||
accessible: access,
|
||||
|
Loading…
Reference in New Issue
Block a user