diff options
author | Alex Auvolat <alex@adnab.me> | 2022-03-15 12:31:23 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2022-03-23 10:25:19 +0100 |
commit | e480aaf338e3dfa280f0a78921c024265c811458 (patch) | |
tree | ecfa923127094b492154fa482ca3da8de64b8d90 | |
parent | 8fd6745745f5676b5e80920792fa23453f3a20d7 (diff) | |
download | garage-e480aaf338e3dfa280f0a78921c024265c811458.tar.gz garage-e480aaf338e3dfa280f0a78921c024265c811458.zip |
Make background tranquility a configurable parameter
-rw-r--r-- | src/block/manager.rs | 11 | ||||
-rw-r--r-- | src/block/rc.rs | 8 | ||||
-rw-r--r-- | src/model/garage.rs | 15 | ||||
-rw-r--r-- | 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<i32>, + background_tranquility: u32, mutation_lock: Mutex<BlockManagerLocked>, @@ -109,6 +108,7 @@ impl BlockManager { db: &sled::Db, data_dir: PathBuf, compression_level: Option<i32>, + background_tranquility: u32, replication: TableShardedReplication, system: Arc<System>, ) -> Arc<Self> { @@ -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<Config, Error> { |