mapserver: serve old files before regen
This commit is contained in:
parent
bc7e9629c1
commit
61d8267bf5
File diff suppressed because it is too large
Load Diff
|
@ -4,14 +4,14 @@ version = "0.1.0"
|
|||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
async-std = { version = "1.6.5", features = ["attributes"] }
|
||||
clap = { version = "3.1.1", default-features = false, features = ["derive", "std"] }
|
||||
crossbeam-channel = "0.5.2"
|
||||
directories = "4.0.0"
|
||||
async-std = { version = "1.12.0", features = ["attributes"] }
|
||||
clap = { version = "3.2.17", default-features = false, features = ["derive", "std"] }
|
||||
crossbeam-channel = "0.5.6"
|
||||
directories = "4.0.1"
|
||||
http-types = "2.12.0"
|
||||
image = { version = "0.24.1", default-features = false, features = ["png"] }
|
||||
log = "0.4.14"
|
||||
parking_lot = "0.12.0"
|
||||
serde = "1.0.117"
|
||||
simplelog = "0.11.1"
|
||||
image = { version = "0.24.3", default-features = false, features = ["png"] }
|
||||
log = "0.4.17"
|
||||
parking_lot = "0.12.1"
|
||||
serde = "1.0.143"
|
||||
simplelog = "0.12.0"
|
||||
tide = "0.16.0"
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
#![feature(try_blocks)]
|
||||
|
||||
//mod config;
|
||||
|
||||
use clap::Parser;
|
||||
use crossbeam_channel::Sender;
|
||||
use log::{debug, error, info, warn};
|
||||
|
@ -157,6 +155,7 @@ fn generate_tile(
|
|||
tile_path: &str,
|
||||
tasks: Arc<RwLock<HashMap<(i32, i32, i32), Sender<()>>>>,
|
||||
config: Arc<Args>,
|
||||
must_wait: bool,
|
||||
) -> Result<(), Error> {
|
||||
let mut generate = true;
|
||||
loop {
|
||||
|
@ -164,6 +163,9 @@ fn generate_tile(
|
|||
if let Some(sender) = tasks_guard.get(&(z, x, y)) {
|
||||
let sender = sender.clone();
|
||||
drop(tasks_guard);
|
||||
if !must_wait {
|
||||
return Ok(());
|
||||
}
|
||||
generate = false;
|
||||
sender.send(()).ok();
|
||||
} else {
|
||||
|
@ -387,12 +389,12 @@ fn get_dep_tile(
|
|||
.unwrap()
|
||||
.as_secs() > config.cache_age
|
||||
{
|
||||
generate_tile(z, x, y, &tile_dir, &tile_path, tasks, config)?;
|
||||
generate_tile(z, x, y, &tile_dir, &tile_path, tasks, config, true)?;
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
warn!("Cannot get modified time of `{}`: {}", tile_path, e);
|
||||
generate_tile(z, x, y, &tile_dir, &tile_path, tasks, config)?;
|
||||
generate_tile(z, x, y, &tile_dir, &tile_path, tasks, config, true)?;
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
|
@ -401,7 +403,7 @@ fn get_dep_tile(
|
|||
} else {
|
||||
warn!("Cannot get metadata of `{}`: {}", tile_path, e);
|
||||
}
|
||||
generate_tile(z, x, y, &tile_dir, &tile_path, tasks, config)?;
|
||||
generate_tile(z, x, y, &tile_dir, &tile_path, tasks, config, true)?;
|
||||
}
|
||||
}
|
||||
Ok(tile_path)
|
||||
|
@ -416,10 +418,26 @@ fn resp_tile(
|
|||
tasks: Arc<RwLock<HashMap<(i32, i32, i32), Sender<()>>>>,
|
||||
config: Arc<Args>,
|
||||
) -> Result<Vec<u8>, Error> {
|
||||
generate_tile(z, x, y, tile_dir, tile_path, tasks, config)?;
|
||||
generate_tile(z, x, y, tile_dir, tile_path, tasks, config, true)?;
|
||||
read_tile_file(tile_path)
|
||||
}
|
||||
|
||||
fn resp_old_tile_then_gen(
|
||||
z: i32,
|
||||
x: i32,
|
||||
y: i32,
|
||||
tile_dir: String,
|
||||
tile_path: String,
|
||||
tasks: Arc<RwLock<HashMap<(i32, i32, i32), Sender<()>>>>,
|
||||
config: Arc<Args>,
|
||||
) -> Result<Vec<u8>, Error> {
|
||||
let tile = read_tile_file(&tile_path);
|
||||
std::thread::spawn(move || {
|
||||
generate_tile(z, x, y, &tile_dir, &tile_path, tasks, config, false).ok();
|
||||
});
|
||||
tile
|
||||
}
|
||||
|
||||
async fn req_tile(
|
||||
req: Request<()>,
|
||||
tasks: Arc<RwLock<HashMap<(i32, i32, i32), Sender<()>>>>,
|
||||
|
@ -446,7 +464,7 @@ async fn req_tile(
|
|||
.unwrap()
|
||||
.as_secs() > config.cache_age
|
||||
{
|
||||
match resp_tile(z, x, y, &tile_dir, &tile_path, tasks, config) {
|
||||
match resp_old_tile_then_gen(z, x, y, tile_dir, tile_path, tasks, config) {
|
||||
Ok(tile_content) => Ok(tide::Response::builder(200)
|
||||
.content_type(http_types::mime::PNG)
|
||||
.body(tile_content)
|
||||
|
|
Loading…
Reference in New Issue