From 09393279c657ee1a02ca89b4a3ef570160cf05ac Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Tue, 6 Dec 2022 20:45:29 +0200 Subject: [PATCH] Fix tenant config parsing --- pageserver/src/config.rs | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/pageserver/src/config.rs b/pageserver/src/config.rs index ab88dd0ad6..4542afae33 100644 --- a/pageserver/src/config.rs +++ b/pageserver/src/config.rs @@ -490,7 +490,7 @@ impl PageServerConf { let mut builder = PageServerConfigBuilder::default(); builder.workdir(workdir.to_owned()); - let mut t_conf: TenantConfOpt = Default::default(); + let mut t_conf = TenantConfOpt::default(); for (key, item) in toml.iter() { match key { @@ -621,6 +621,12 @@ impl PageServerConf { if let Some(max_lsn_wal_lag) = item.get("max_lsn_wal_lag") { t_conf.max_lsn_wal_lag = Some(parse_toml_from_str("max_lsn_wal_lag", max_lsn_wal_lag)?); } + if let Some(trace_read_requests) = item.get("trace_read_requests") { + t_conf.trace_read_requests = + Some(trace_read_requests.as_bool().with_context(|| { + "configure option trace_read_requests is not a bool".to_string() + })?); + } Ok(t_conf) } @@ -1020,6 +1026,35 @@ broker_endpoints = ['{broker_endpoint}'] Ok(()) } + #[test] + fn parse_tenant_config() -> anyhow::Result<()> { + let tempdir = tempdir()?; + let (workdir, pg_distrib_dir) = prepare_fs(&tempdir)?; + + let broker_endpoint = "http://127.0.0.1:7777"; + let trace_read_requests = true; + + let config_string = format!( + r#"{ALL_BASE_VALUES_TOML} +pg_distrib_dir='{}' +broker_endpoints = ['{broker_endpoint}'] + +[tenant_config] +trace_read_requests = {trace_read_requests}"#, + pg_distrib_dir.display(), + ); + + let toml = config_string.parse()?; + + let conf = PageServerConf::parse_and_validate(&toml, &workdir)?; + assert_eq!( + conf.default_tenant_conf.trace_read_requests, trace_read_requests, + "Tenant config from pageserver config file should be parsed and udpated values used as defaults for all tenants", + ); + + Ok(()) + } + fn prepare_fs(tempdir: &TempDir) -> anyhow::Result<(PathBuf, PathBuf)> { let tempdir_path = tempdir.path();