From e480aaf338e3dfa280f0a78921c024265c811458 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 15 Mar 2022 12:31:23 +0100 Subject: [PATCH] Make background tranquility a configurable parameter --- src/block/manager.rs | 11 ++++++----- src/block/rc.rs | 8 +++----- src/model/garage.rs | 15 +++++++++------ src/util/config.rs | 7 +++++++ 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/block/manager.rs b/src/block/manager.rs index feb6fb9d..3215d27e 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -29,15 +29,13 @@ use garage_rpc::*; use garage_table::replication::{TableReplication, TableShardedReplication}; -use crate::metrics::*; use crate::block::*; +use crate::metrics::*; use crate::rc::*; /// Size under which data will be stored inlined in database instead of as files pub const INLINE_THRESHOLD: usize = 3072; -pub const BACKGROUND_TRANQUILITY: u32 = 2; - // Timeout for RPCs that read and write blocks to remote nodes const BLOCK_RW_TIMEOUT: Duration = Duration::from_secs(30); // Timeout for RPCs that ask other nodes whether they need a copy @@ -82,8 +80,9 @@ pub struct BlockManager { pub replication: TableShardedReplication, /// Directory in which block are stored pub data_dir: PathBuf, - /// Zstd compression level + compression_level: Option, + background_tranquility: u32, mutation_lock: Mutex, @@ -109,6 +108,7 @@ impl BlockManager { db: &sled::Db, data_dir: PathBuf, compression_level: Option, + background_tranquility: u32, replication: TableShardedReplication, system: Arc, ) -> Arc { @@ -139,6 +139,7 @@ impl BlockManager { replication, data_dir, compression_level, + background_tranquility, mutation_lock: Mutex::new(manager_locked), rc, resync_queue, @@ -440,7 +441,7 @@ impl BlockManager { while !*must_exit.borrow() { match self.resync_iter(&mut must_exit).await { Ok(true) => { - tranquilizer.tranquilize(BACKGROUND_TRANQUILITY).await; + tranquilizer.tranquilize(self.background_tranquility).await; } Ok(false) => { tranquilizer.reset(); diff --git a/src/block/rc.rs b/src/block/rc.rs index 0f497c9b..ec3ea44e 100644 --- a/src/block/rc.rs +++ b/src/block/rc.rs @@ -1,7 +1,7 @@ use std::convert::TryInto; -use garage_util::error::*; use garage_util::data::*; +use garage_util::error::*; use garage_util::time::*; use crate::manager::BLOCK_GC_DELAY; @@ -12,9 +12,7 @@ pub struct BlockRc { impl BlockRc { pub(crate) fn new(rc: sled::Tree) -> Self { - Self { - rc - } + Self { rc } } /// Increment the reference counter associated to a hash. @@ -34,7 +32,7 @@ impl BlockRc { .rc .update_and_fetch(&hash, |old| RcEntry::parse_opt(old).decrement().serialize())?; let new_rc = RcEntry::parse_opt(new_rc); - Ok(matches!(new_rc, RcEntry::Deletable {..})) + Ok(matches!(new_rc, RcEntry::Deletable { .. })) } /// Read a block's reference count diff --git a/src/model/garage.rs b/src/model/garage.rs index 93402ca2..cbceeb64 100644 --- a/src/model/garage.rs +++ b/src/model/garage.rs @@ -7,11 +7,11 @@ use garage_util::config::*; use garage_rpc::system::System; +use garage_block::manager::*; use garage_table::replication::ReplicationMode; use garage_table::replication::TableFullReplication; use garage_table::replication::TableShardedReplication; use garage_table::*; -use garage_block::manager::*; use crate::block_ref_table::*; use crate::bucket_alias_table::*; @@ -86,11 +86,14 @@ impl Garage { }; info!("Initialize block manager..."); - let block_manager = - BlockManager::new(&db, - config.data_dir.clone(), - config.compression_level, - data_rep_param, system.clone()); + let block_manager = BlockManager::new( + &db, + config.data_dir.clone(), + config.compression_level, + config.block_manager_background_tranquility, + data_rep_param, + system.clone(), + ); info!("Initialize block_ref_table..."); let block_ref_table = Table::new( diff --git a/src/util/config.rs b/src/util/config.rs index f74a62d0..e4d96476 100644 --- a/src/util/config.rs +++ b/src/util/config.rs @@ -23,6 +23,10 @@ pub struct Config { #[serde(default = "default_block_size")] pub block_size: usize, + /// Size of data blocks to save to disk + #[serde(default = "default_block_manager_background_tranquility")] + pub block_manager_background_tranquility: u32, + /// Replication mode. Supported values: /// - none, 1 -> no replication /// - 2 -> 2-way replication @@ -118,6 +122,9 @@ fn default_sled_flush_every_ms() -> u64 { fn default_block_size() -> usize { 1048576 } +fn default_block_manager_background_tranquility() -> u32 { + 2 +} /// Read and parse configuration pub fn read_config(config_file: PathBuf) -> Result {