From 4a0a9e748c3317d509f22d48b42a29c64533d434 Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Thu, 22 Apr 2021 17:48:51 +0300 Subject: [PATCH] Enable garbage collector --- pageserver/src/bin/pageserver.rs | 4 ++-- pageserver/src/page_cache.rs | 12 +++++++----- pageserver/src/walredo.rs | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index 23e0d5e57b..035667d62d 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -19,8 +19,8 @@ use slog::Drain; use pageserver::{page_service, tui, zenith_repo_dir, PageServerConf}; -const DEFAULT_GC_HORIZON: u64 = 0; //64 * 1024 * 1024; -const DEFAULT_GC_PERIOD_SEC: u64 = 1; +const DEFAULT_GC_HORIZON: u64 = 64 * 1024 * 1024; +const DEFAULT_GC_PERIOD_SEC: u64 = 10; fn main() -> Result<()> { let arg_matches = App::new("Zenith page server") diff --git a/pageserver/src/page_cache.rs b/pageserver/src/page_cache.rs index 21f794913d..0af7141712 100644 --- a/pageserver/src/page_cache.rs +++ b/pageserver/src/page_cache.rs @@ -1,9 +1,7 @@ // // Page Cache holds all the different page versions and WAL records // -// The Page Cache is a BTreeMap, keyed by the RelFileNode an blocknumber, and the LSN. -// The BTreeMap is protected by a Mutex, and each cache entry is protected by another -// per-entry mutex. +// The Page Cache is currenusing RocksDB for storing wal records and full page images, keyed by the RelFileNode, blocknumber, and the LSN. // use crate::restore_local_repo::restore_timeline; @@ -174,7 +172,8 @@ fn open_rocksdb(_conf: &PageServerConf, timelineid: ZTimelineId) -> rocksdb::DB opts.create_if_missing(true); opts.set_use_fsync(true); opts.set_compression_type(rocksdb::DBCompressionType::Lz4); - rocksdb::DB::open(&opts, &path).unwrap() + opts.create_missing_column_families(true); + rocksdb::DB::open_cf(&opts, &path, &[rocksdb::DEFAULT_COLUMN_FAMILY_NAME]).unwrap() } fn init_page_cache(conf: &PageServerConf, timelineid: ZTimelineId) -> PageCache { @@ -218,7 +217,7 @@ fn init_page_cache(conf: &PageServerConf, timelineid: ZTimelineId) -> PageCache // stored directly in the cache entry in that you still need to run the WAL redo // routine to generate the page image. // -#[derive(PartialEq, Eq, PartialOrd, Ord, Clone)] +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)] pub struct CacheKey { pub tag: BufferTag, pub lsn: u64, @@ -430,6 +429,7 @@ impl PageCache { // reconstruct most recent page version if content.wal_record.is_some() { + trace!("Reconstruct most recent page {:?}", key); // force reconstruction of most recent page version self.reconstruct_page(key, content)?; } @@ -451,6 +451,7 @@ impl PageCache { minbuf.clear(); minbuf.extend_from_slice(&k); let key = CacheKey::unpack(&mut minbuf); + trace!("Reconstruct horizon page {:?}", key); self.reconstruct_page(key, content)?; } } @@ -458,6 +459,7 @@ impl PageCache { // remove records prior to horizon minbuf.clear(); minkey.pack(&mut minbuf); + trace!("Delete records in range {:?}..{:?}", minkey, maxkey); self.db.delete_range_cf(cf, &minbuf[..], &maxbuf[..])?; maxkey = minkey; diff --git a/pageserver/src/walredo.rs b/pageserver/src/walredo.rs index 0fc9ae51e7..10fa9caf8e 100644 --- a/pageserver/src/walredo.rs +++ b/pageserver/src/walredo.rs @@ -213,7 +213,7 @@ fn handle_apply_request( let result; - debug!( + trace!( "applied {} WAL records in {} ms to reconstruct page image at LSN {:X}/{:X}", nrecords, duration.as_millis(),