diff --git a/pageserver/src/branches.rs b/pageserver/src/branches.rs index 23af734060..3bd30bb26a 100644 --- a/pageserver/src/branches.rs +++ b/pageserver/src/branches.rs @@ -17,6 +17,7 @@ use std::{ use zenith_utils::zid::{ZTenantId, ZTimelineId}; use log::*; +use zenith_utils::crashsafe_dir; use zenith_utils::logging; use zenith_utils::lsn::Lsn; @@ -118,7 +119,7 @@ pub fn init_pageserver(conf: &'static PageServerConf, create_tenant: Option<&str println!("initializing tenantid {}", tenantid); create_repo(conf, tenantid, dummy_redo_mgr).with_context(|| "failed to create repo")?; } - fs::create_dir_all(conf.tenants_path())?; + crashsafe_dir::create_dir_all(conf.tenants_path())?; println!("pageserver init succeeded"); Ok(()) @@ -135,12 +136,12 @@ pub fn create_repo( } // top-level dir may exist if we are creating it through CLI - fs::create_dir_all(&repo_dir) + crashsafe_dir::create_dir_all(&repo_dir) .with_context(|| format!("could not create directory {}", repo_dir.display()))?; - fs::create_dir(conf.timelines_path(&tenantid))?; - fs::create_dir_all(conf.branches_path(&tenantid))?; - fs::create_dir_all(conf.tags_path(&tenantid))?; + crashsafe_dir::create_dir(conf.timelines_path(&tenantid))?; + crashsafe_dir::create_dir_all(conf.branches_path(&tenantid))?; + crashsafe_dir::create_dir_all(conf.tags_path(&tenantid))?; info!("created directory structure in {}", repo_dir.display()); diff --git a/pageserver/src/layered_repository.rs b/pageserver/src/layered_repository.rs index 7425dc6da5..0cf4fe9359 100644 --- a/pageserver/src/layered_repository.rs +++ b/pageserver/src/layered_repository.rs @@ -44,6 +44,7 @@ use zenith_metrics::{ }; use zenith_metrics::{register_histogram_vec, HistogramVec}; use zenith_utils::bin_ser::BeSer; +use zenith_utils::crashsafe_dir; use zenith_utils::lsn::{AtomicLsn, Lsn, RecordLsn}; use zenith_utils::seqwait::SeqWait; @@ -126,7 +127,7 @@ impl Repository for LayeredRepository { let mut timelines = self.timelines.lock().unwrap(); // Create the timeline directory, and write initial metadata to file. - std::fs::create_dir_all(self.conf.timeline_path(&timelineid, &self.tenantid))?; + crashsafe_dir::create_dir_all(self.conf.timeline_path(&timelineid, &self.tenantid))?; let metadata = TimelineMetadata { disk_consistent_lsn: Lsn(0), @@ -178,7 +179,7 @@ impl Repository for LayeredRepository { ancestor_timeline: Some(src), ancestor_lsn: start_lsn, }; - std::fs::create_dir_all(self.conf.timeline_path(&dst, &self.tenantid))?; + crashsafe_dir::create_dir_all(self.conf.timeline_path(&dst, &self.tenantid))?; Self::save_metadata(self.conf, dst, self.tenantid, &metadata)?; info!("branched timeline {} from {} at {}", dst, src, start_lsn);