From 28f752ff46a389121fe223d029e132ebdf5b9ed8 Mon Sep 17 00:00:00 2001 From: John Spray Date: Wed, 1 Nov 2023 21:09:41 +0000 Subject: [PATCH] neon_local: don't use default remote storage if user specified it on CLI --- control_plane/src/pageserver.rs | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/control_plane/src/pageserver.rs b/control_plane/src/pageserver.rs index 505f18fade..5acf2fb8f9 100644 --- a/control_plane/src/pageserver.rs +++ b/control_plane/src/pageserver.rs @@ -103,8 +103,10 @@ impl PageServerNode { } } - // pageserver conf overrides defined by neon_local configuration. - fn neon_local_overrides(&self) -> Vec { + /// Merge overrides provided by the user on the command line with our default overides derived from neon_local configuration. + /// + /// These all end up on the command line of the `pageserver` binary. + fn neon_local_overrides(&self, cli_overrides: &[&str]) -> Vec { let id = format!("id={}", self.conf.id); // FIXME: the paths should be shell-escaped to handle paths with spaces, quotas etc. let pg_distrib_dir_param = format!( @@ -120,9 +122,6 @@ impl PageServerNode { let broker_endpoint_param = format!("broker_endpoint='{}'", self.env.broker.client_url()); - let remote_storage_param = - format!("remote_storage={{local_path='../{PAGESERVER_REMOTE_STORAGE_DIR}'}}"); - let mut overrides = vec![ id, pg_distrib_dir_param, @@ -131,7 +130,6 @@ impl PageServerNode { listen_http_addr_param, listen_pg_addr_param, broker_endpoint_param, - remote_storage_param, ]; if let Some(control_plane_api) = &self.env.control_plane_api { @@ -141,12 +139,25 @@ impl PageServerNode { )); } + if !cli_overrides + .iter() + .any(|c| c.starts_with("remote_storage")) + { + overrides.push(format!( + "remote_storage={{local_path='../{PAGESERVER_REMOTE_STORAGE_DIR}'}}" + )); + } + if self.conf.http_auth_type != AuthType::Trust || self.conf.pg_auth_type != AuthType::Trust { // Keys are generated in the toplevel repo dir, pageservers' workdirs // are one level below that, so refer to keys with ../ overrides.push("auth_validation_public_key_path='../auth_public_key.pem'".to_owned()); } + + // Apply the user-provided overrides + overrides.extend(cli_overrides.iter().map(|&c| c.to_owned())); + overrides } @@ -212,9 +223,6 @@ impl PageServerNode { } fn start_node(&self, config_overrides: &[&str], update_config: bool) -> anyhow::Result { - let mut overrides = self.neon_local_overrides(); - overrides.extend(config_overrides.iter().map(|&c| c.to_owned())); - let datadir = self.repo_path(); print!( "Starting pageserver node {} at '{}' in {:?}", @@ -257,8 +265,7 @@ impl PageServerNode { ) -> Vec> { let mut args = vec![Cow::Borrowed("-D"), Cow::Borrowed(datadir_path_str)]; - let mut overrides = self.neon_local_overrides(); - overrides.extend(config_overrides.iter().map(|&c| c.to_owned())); + let overrides = self.neon_local_overrides(config_overrides); for config_override in overrides { args.push(Cow::Borrowed("-c")); args.push(Cow::Owned(config_override));