aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-03-15 12:31:23 +0100
committerAlex Auvolat <alex@adnab.me>2022-03-23 10:25:19 +0100
commite480aaf338e3dfa280f0a78921c024265c811458 (patch)
treeecfa923127094b492154fa482ca3da8de64b8d90
parent8fd6745745f5676b5e80920792fa23453f3a20d7 (diff)
downloadgarage-e480aaf338e3dfa280f0a78921c024265c811458.tar.gz
garage-e480aaf338e3dfa280f0a78921c024265c811458.zip
Make background tranquility a configurable parameter
-rw-r--r--src/block/manager.rs11
-rw-r--r--src/block/rc.rs8
-rw-r--r--src/model/garage.rs15
-rw-r--r--src/util/config.rs7
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> {