diff --git a/control_plane/src/background_process.rs b/control_plane/src/background_process.rs index c558c09854..860b5344ba 100644 --- a/control_plane/src/background_process.rs +++ b/control_plane/src/background_process.rs @@ -205,17 +205,14 @@ pub fn stop_process(immediate: bool, process_name: &str, pid_file: &Path) -> any fn fill_rust_env_vars(cmd: &mut Command) -> &mut Command { let mut filled_cmd = cmd.env_clear().env("RUST_BACKTRACE", "1"); - let var = "LLVM_PROFILE_FILE"; - if let Some(val) = std::env::var_os(var) { - filled_cmd = filled_cmd.env(var, val); + // Pass through these environment variables to the command + for var in ["LLVM_PROFILE_FILE", "FAILPOINTS", "RUST_LOG"] { + if let Some(val) = std::env::var_os(var) { + filled_cmd = filled_cmd.env(var, val); + } } - const RUST_LOG_KEY: &str = "RUST_LOG"; - if let Ok(rust_log_value) = std::env::var(RUST_LOG_KEY) { - filled_cmd.env(RUST_LOG_KEY, rust_log_value) - } else { - filled_cmd - } + filled_cmd } fn fill_aws_secrets_vars(mut cmd: &mut Command) -> &mut Command { diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index 62119b51c6..046bef86dc 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -199,6 +199,20 @@ fn start_pageserver(conf: &'static PageServerConf) -> anyhow::Result<()> { logging::init(conf.log_format)?; info!("version: {}", version()); + // If any failpoints were set from FAILPOINTS environment variable, + // print them to the log for debugging purposes + let failpoints = fail::list(); + if !failpoints.is_empty() { + info!( + "started with failpoints: {}", + failpoints + .iter() + .map(|(name, actions)| format!("{name}={actions}")) + .collect::>() + .join(";") + ) + } + let lock_file_path = conf.workdir.join(PID_FILE_NAME); let lock_file = match lock_file::create_lock_file(&lock_file_path, Pid::this().to_string()) { lock_file::LockCreationResult::Created { diff --git a/test_runner/fixtures/neon_fixtures.py b/test_runner/fixtures/neon_fixtures.py index 236330e16a..98115ff7ce 100644 --- a/test_runner/fixtures/neon_fixtures.py +++ b/test_runner/fixtures/neon_fixtures.py @@ -1568,6 +1568,7 @@ class NeonCli(AbstractNeonCli): def pageserver_start( self, overrides: Tuple[str, ...] = (), + extra_env_vars: Optional[Dict[str, str]] = None, ) -> "subprocess.CompletedProcess[str]": start_args = ["pageserver", "start", *overrides] append_pageserver_param_overrides( @@ -1577,11 +1578,11 @@ class NeonCli(AbstractNeonCli): pageserver_config_override=self.env.pageserver.config_override, ) - s3_env_vars = None if self.env.remote_storage is not None and isinstance(self.env.remote_storage, S3Storage): s3_env_vars = self.env.remote_storage.access_env_vars() + extra_env_vars = (extra_env_vars or {}) | s3_env_vars - return self.raw_cli(start_args, extra_env_vars=s3_env_vars) + return self.raw_cli(start_args, extra_env_vars=extra_env_vars) def pageserver_stop(self, immediate=False) -> "subprocess.CompletedProcess[str]": cmd = ["pageserver", "stop"] @@ -1762,7 +1763,11 @@ class NeonPageserver(PgProtocol): ".*Removing intermediate uninit mark file.*", ] - def start(self, overrides: Tuple[str, ...] = ()) -> "NeonPageserver": + def start( + self, + overrides: Tuple[str, ...] = (), + extra_env_vars: Optional[Dict[str, str]] = None, + ) -> "NeonPageserver": """ Start the page server. `overrides` allows to add some config to this pageserver start. @@ -1770,7 +1775,7 @@ class NeonPageserver(PgProtocol): """ assert self.running is False - self.env.neon_cli.pageserver_start(overrides=overrides) + self.env.neon_cli.pageserver_start(overrides=overrides, extra_env_vars=extra_env_vars) self.running = True return self