Add pageserver option

This commit is contained in:
Bojan Serafimov
2022-04-13 14:35:16 -04:00
parent c2814e9828
commit e74ddf4391
3 changed files with 27 additions and 8 deletions
+13
View File
@@ -134,6 +134,8 @@ pub struct PageServerConf {
pub auth_validation_public_key_path: Option<PathBuf>,
pub remote_storage_config: Option<RemoteStorageConfig>,
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<Option<RemoteStorageConfig>>,
id: BuilderValue<ZNodeId>,
emit_wal_metadata: BuilderValue<bool>,
}
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<PageServerConf> {
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),
}
}
+6 -4
View File
@@ -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(())
}
+8 -4
View File
@@ -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]