Fix martin --auto-bounds silently ignored with --config (#1223)

When starting martin with both `--auto-bounds` and `--config`, the
auto-bounds param was silently ignored, but now it will notify of the
override.

Also includes a few minor formatting changes
This commit is contained in:
Yuri Astrakhan 2024-02-29 20:56:48 -05:00 committed by GitHub
parent b492145bc8
commit fcaffcbe49
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 27 additions and 15 deletions

1
Cargo.lock generated
View File

@ -2106,6 +2106,7 @@ dependencies = [
"criterion",
"ctor",
"deadpool-postgres",
"enum-display",
"env_logger",
"flate2",
"futures",

View File

@ -79,11 +79,13 @@ bit-set = { workspace = true, optional = true }
brotli.workspace = true
clap.workspace = true
deadpool-postgres = { workspace = true, optional = true }
enum-display.workspace = true
env_logger.workspace = true
flate2.workspace = true
futures.workspace = true
itertools.workspace = true
json-patch = { workspace = true, optional = true }
lambda-web = { workspace = true, optional = true }
log.workspace = true
martin-tile-utils.workspace = true
mbtiles = { workspace = true, optional = true }
@ -92,8 +94,8 @@ num_cpus.workspace = true
pbf_font_tools = { workspace = true, optional = true }
pmtiles = { workspace = true, optional = true }
postgis = { workspace = true, optional = true }
postgres-protocol = { workspace = true, optional = true }
postgres = { workspace = true, optional = true }
postgres-protocol = { workspace = true, optional = true }
regex.workspace = true
rustls-native-certs.workspace = true
rustls-pemfile.workspace = true
@ -110,7 +112,6 @@ tilejson.workspace = true
tokio = { workspace = true, features = ["io-std"] }
tokio-postgres-rustls = { workspace = true, optional = true }
url.workspace = true
lambda-web = { workspace = true, optional = true }
[dev-dependencies]
cargo-husky.workspace = true

View File

@ -1,6 +1,7 @@
use std::time::Duration;
use clap::ValueEnum;
use enum_display::EnumDisplay;
use log::{info, warn};
use serde::{Deserialize, Serialize};
@ -13,8 +14,11 @@ use crate::utils::{OptBoolObj, OptOneMany};
// Must match the help string for BoundsType::Quick
pub const DEFAULT_BOUNDS_TIMEOUT: Duration = Duration::from_secs(5);
#[derive(PartialEq, Eq, Default, Debug, Clone, Copy, Serialize, Deserialize, ValueEnum)]
#[derive(
PartialEq, Eq, Default, Debug, Clone, Copy, Serialize, Deserialize, ValueEnum, EnumDisplay,
)]
#[serde(rename_all = "lowercase")]
#[enum_display(case = "Kebab")]
pub enum BoundsCalcType {
/// Compute table geometry bounds, but abort if it takes longer than 5 seconds.
#[default]
@ -37,7 +41,7 @@ pub struct PgArgs {
/// If a spatial PG table has SRID 0, then this default SRID will be used as a fallback.
#[arg(short, long)]
pub default_srid: Option<i32>,
#[arg(help = format!("Maximum Postgres connections pool size [DEFAULT: {}]", POOL_SIZE_DEFAULT), short, long)]
#[arg(help = format!("Maximum Postgres connections pool size [DEFAULT: {POOL_SIZE_DEFAULT}]"), short, long)]
pub pool_size: Option<usize>,
/// Limit the number of features in a tile from a PG table source.
#[arg(short, long)]
@ -76,29 +80,35 @@ impl PgArgs {
}
}
/// Apply CLI parameters from `self` to the configuration loaded from the config file `pg_config`
pub fn override_config<'a>(self, pg_config: &mut OptOneMany<PgConfig>, env: &impl Env<'a>) {
if self.default_srid.is_some() {
info!("Overriding configured default SRID to {} on all Postgres connections because of a CLI parameter", self.default_srid.unwrap());
if let Some(default_srid) = self.default_srid {
info!("Overriding configured default SRID to {default_srid} on all Postgres connections because of a CLI parameter");
pg_config.iter_mut().for_each(|c| {
c.default_srid = self.default_srid;
});
}
if self.pool_size.is_some() {
info!("Overriding configured pool size to {} on all Postgres connections because of a CLI parameter", self.pool_size.unwrap());
if let Some(pool_size) = self.pool_size {
info!("Overriding configured pool size to {pool_size} on all Postgres connections because of a CLI parameter");
pg_config.iter_mut().for_each(|c| {
c.pool_size = self.pool_size;
});
}
if self.max_feature_count.is_some() {
info!("Overriding maximum feature count to {} on all Postgres connections because of a CLI parameter", self.max_feature_count.unwrap());
if let Some(auto_bounds) = self.auto_bounds {
info!("Overriding auto_bounds to {auto_bounds} on all Postgres connections because of a CLI parameter");
pg_config.iter_mut().for_each(|c| {
c.auto_bounds = self.auto_bounds;
});
}
if let Some(max_feature_count) = self.max_feature_count {
info!("Overriding maximum feature count to {max_feature_count} on all Postgres connections because of a CLI parameter");
pg_config.iter_mut().for_each(|c| {
c.max_feature_count = self.max_feature_count;
});
}
if self.ca_root_file.is_some() {
if let Some(ref ca_root_file) = self.ca_root_file {
info!("Overriding root certificate file to {} on all Postgres connections because of a CLI parameter",
self.ca_root_file.as_ref().unwrap().display());
ca_root_file.display());
pg_config.iter_mut().for_each(|c| {
c.ssl_certificates.ssl_root_cert = self.ca_root_file.clone();
});

View File

@ -6,9 +6,9 @@ use crate::srv::{SrvConfig, KEEP_ALIVE_DEFAULT, LISTEN_ADDRESSES_DEFAULT};
#[derive(clap::Args, Debug, PartialEq, Default)]
#[command(about, version)]
pub struct SrvArgs {
#[arg(help = format!("Connection keep alive timeout. [DEFAULT: {}]", KEEP_ALIVE_DEFAULT), short, long)]
#[arg(help = format!("Connection keep alive timeout. [DEFAULT: {KEEP_ALIVE_DEFAULT}]"), short, long)]
pub keep_alive: Option<u64>,
#[arg(help = format!("The socket address to bind. [DEFAULT: {}]", LISTEN_ADDRESSES_DEFAULT), short, long)]
#[arg(help = format!("The socket address to bind. [DEFAULT: {LISTEN_ADDRESSES_DEFAULT}]"), short, long)]
pub listen_addresses: Option<String>,
/// Set TileJSON URL path prefix, ignoring X-Rewrite-URL header. Must begin with a `/`. Examples: `/`, `/tiles`
#[arg(long)]