From e74ddf4391cd08497581ba098a0b2c1189f658d1 Mon Sep 17 00:00:00 2001 From: Bojan Serafimov Date: Wed, 13 Apr 2022 14:35:16 -0400 Subject: [PATCH] Add pageserver option --- pageserver/src/config.rs | 13 +++++++++++++ pageserver/src/wal_metadata.rs | 10 ++++++---- test_runner/performance/test_pageserver.py | 12 ++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/pageserver/src/config.rs b/pageserver/src/config.rs index 0d5cac8b4f..d3649fab94 100644 --- a/pageserver/src/config.rs +++ b/pageserver/src/config.rs @@ -134,6 +134,8 @@ pub struct PageServerConf { pub auth_validation_public_key_path: Option, pub remote_storage_config: Option, + + pub emit_wal_metadata: bool, } // use dedicated enum for builder to better indicate the intention @@ -185,6 +187,8 @@ struct PageServerConfigBuilder { remote_storage_config: BuilderValue>, id: BuilderValue, + + emit_wal_metadata: BuilderValue, } impl Default for PageServerConfigBuilder { @@ -216,6 +220,7 @@ impl Default for PageServerConfigBuilder { auth_validation_public_key_path: Set(None), remote_storage_config: Set(None), id: NotSet, + emit_wal_metadata: Set(false), } } } @@ -296,6 +301,10 @@ impl PageServerConfigBuilder { self.id = BuilderValue::Set(node_id) } + pub fn emit_wal_metadata(&mut self, value: bool) { + self.emit_wal_metadata = BuilderValue::Set(value) + } + pub fn build(self) -> Result { Ok(PageServerConf { listen_pg_addr: self @@ -342,6 +351,9 @@ impl PageServerConfigBuilder { .remote_storage_config .ok_or(anyhow::anyhow!("missing remote_storage_config"))?, id: self.id.ok_or(anyhow::anyhow!("missing id"))?, + emit_wal_metadata: self + .emit_wal_metadata + .ok_or(anyhow::anyhow!("emit_wal_metadata not specifiec"))?, }) } } @@ -473,6 +485,7 @@ impl PageServerConf { builder.remote_storage_config(Some(Self::parse_remote_storage_config(item)?)) } "id" => builder.id(ZNodeId(parse_toml_u64(key, item)?)), + "emit_wal_metadata" => builder.emit_wal_metadata(true), _ => bail!("unrecognized pageserver option '{}'", key), } } diff --git a/pageserver/src/wal_metadata.rs b/pageserver/src/wal_metadata.rs index 3bc9566280..53a9eee763 100644 --- a/pageserver/src/wal_metadata.rs +++ b/pageserver/src/wal_metadata.rs @@ -81,10 +81,12 @@ pub struct WalEntryMetadata { } pub fn init(conf: &'static PageServerConf) -> Result<()> { - let wal_metadata_file_dir = conf.workdir.join("wal_metadata.log"); - WAL_METADATA_FILE - .set(File::create(wal_metadata_file_dir)?) - .expect("wal_metadata file is already created"); + if conf.emit_wal_metadata { + let wal_metadata_file_dir = conf.workdir.join("wal_metadata.log"); + WAL_METADATA_FILE + .set(File::create(wal_metadata_file_dir)?) + .expect("wal_metadata file is already created"); + } Ok(()) } diff --git a/test_runner/performance/test_pageserver.py b/test_runner/performance/test_pageserver.py index 059286857c..51dd0fdaa9 100644 --- a/test_runner/performance/test_pageserver.py +++ b/test_runner/performance/test_pageserver.py @@ -1,11 +1,15 @@ from contextlib import closing -from fixtures.zenith_fixtures import ZenithEnv, PgBin +from fixtures.zenith_fixtures import ZenithEnv, PgBin, ZenithEnvBuilder from fixtures.benchmark_fixture import MetricReport, ZenithBenchmarker -def test_get_page(zenith_simple_env: ZenithEnv, zenbenchmark: ZenithBenchmarker, pg_bin: PgBin): - env = zenith_simple_env - env.zenith_cli.create_branch("test_pageserver", "empty") +def test_get_page(zenith_env_builder: ZenithEnvBuilder, + zenbenchmark: ZenithBenchmarker, + pg_bin: PgBin): + zenith_env_builder.pageserver_config_override = "emit_wal_metadata=true" + env = zenith_env_builder.init_start() + + env.zenith_cli.create_branch("test_pageserver", "main") pg = env.postgres.create_start('test_pageserver') tenant_hex = env.initial_tenant.hex timeline = pg.safe_psql("SHOW zenith.zenith_timeline")[0][0]