From 534fd33e3d8c80ec7a0d7244e75c0ea41892ce27 Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Mon, 2 Aug 2021 19:59:12 +0300 Subject: [PATCH] Start GC in page cache initialization rather than during branch creation --- pageserver/src/branches.rs | 19 +++++++------------ pageserver/src/page_cache.rs | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/pageserver/src/branches.rs b/pageserver/src/branches.rs index 8677edfd1f..db96f01878 100644 --- a/pageserver/src/branches.rs +++ b/pageserver/src/branches.rs @@ -47,6 +47,7 @@ pub fn init_pageserver( workdir: &Path, create_tenant: Option<&str>, ) -> Result<()> { + env::set_current_dir(workdir)?; // Initialize logger @@ -104,17 +105,11 @@ pub fn create_repo( // rapid init+start case now, but the general race condition remains if you restart the // server quickly. let repo: Arc = match conf.repository_format { - RepositoryFormat::Layered => { - let repo = Arc::new(crate::layered_repository::LayeredRepository::new( - conf, - wal_redo_manager, - tenantid, - )); - if conf.gc_horizon != 0 { - crate::layered_repository::LayeredRepository::launch_gc_thread(conf, repo.clone()); - } - repo - } + RepositoryFormat::Layered => Arc::new( + crate::layered_repository::LayeredRepository::new(conf, + wal_redo_manager, + tenantid + )), RepositoryFormat::RocksDb => { let obj_store = crate::rocksdb_storage::RocksObjectStore::create(conf, &tenantid)?; @@ -122,7 +117,7 @@ pub fn create_repo( conf, Arc::new(obj_store), wal_redo_manager, - tenantid, + tenantid )) } }; diff --git a/pageserver/src/page_cache.rs b/pageserver/src/page_cache.rs index a9d1ffe635..7c9fd4f04f 100644 --- a/pageserver/src/page_cache.rs +++ b/pageserver/src/page_cache.rs @@ -33,10 +33,19 @@ pub fn init(conf: &'static PageServerConf) { // Set up an object repository, for actual data storage. let repo: Arc = match conf.repository_format { - RepositoryFormat::Layered => Arc::new(LayeredRepository::new(conf, - Arc::new(walredo_mgr), - tenantid - )), + RepositoryFormat::Layered => { + let repo = Arc::new(LayeredRepository::new( + conf, + Arc::new(walredo_mgr), + tenantid, + )); + if conf.gc_horizon != 0 { + crate::layered_repository::LayeredRepository::launch_gc_thread(conf, repo.clone()); + } else { + info!("Garbage collection is disabled"); + } + repo + } RepositoryFormat::RocksDb => { let obj_store = RocksObjectStore::open(conf, &tenantid).unwrap(); @@ -44,7 +53,7 @@ pub fn init(conf: &'static PageServerConf) { conf, Arc::new(obj_store), Arc::new(walredo_mgr), - tenantid + tenantid, )) } };