forked from Deuxfleurs/garage
Make background tranquility a configurable parameter
This commit is contained in:
parent
8fd6745745
commit
e480aaf338
4 changed files with 25 additions and 16 deletions
src
|
@ -29,15 +29,13 @@ use garage_rpc::*;
|
||||||
|
|
||||||
use garage_table::replication::{TableReplication, TableShardedReplication};
|
use garage_table::replication::{TableReplication, TableShardedReplication};
|
||||||
|
|
||||||
use crate::metrics::*;
|
|
||||||
use crate::block::*;
|
use crate::block::*;
|
||||||
|
use crate::metrics::*;
|
||||||
use crate::rc::*;
|
use crate::rc::*;
|
||||||
|
|
||||||
/// Size under which data will be stored inlined in database instead of as files
|
/// Size under which data will be stored inlined in database instead of as files
|
||||||
pub const INLINE_THRESHOLD: usize = 3072;
|
pub const INLINE_THRESHOLD: usize = 3072;
|
||||||
|
|
||||||
pub const BACKGROUND_TRANQUILITY: u32 = 2;
|
|
||||||
|
|
||||||
// Timeout for RPCs that read and write blocks to remote nodes
|
// Timeout for RPCs that read and write blocks to remote nodes
|
||||||
const BLOCK_RW_TIMEOUT: Duration = Duration::from_secs(30);
|
const BLOCK_RW_TIMEOUT: Duration = Duration::from_secs(30);
|
||||||
// Timeout for RPCs that ask other nodes whether they need a copy
|
// Timeout for RPCs that ask other nodes whether they need a copy
|
||||||
|
@ -82,8 +80,9 @@ pub struct BlockManager {
|
||||||
pub replication: TableShardedReplication,
|
pub replication: TableShardedReplication,
|
||||||
/// Directory in which block are stored
|
/// Directory in which block are stored
|
||||||
pub data_dir: PathBuf,
|
pub data_dir: PathBuf,
|
||||||
/// Zstd compression level
|
|
||||||
compression_level: Option<i32>,
|
compression_level: Option<i32>,
|
||||||
|
background_tranquility: u32,
|
||||||
|
|
||||||
mutation_lock: Mutex<BlockManagerLocked>,
|
mutation_lock: Mutex<BlockManagerLocked>,
|
||||||
|
|
||||||
|
@ -109,6 +108,7 @@ impl BlockManager {
|
||||||
db: &sled::Db,
|
db: &sled::Db,
|
||||||
data_dir: PathBuf,
|
data_dir: PathBuf,
|
||||||
compression_level: Option<i32>,
|
compression_level: Option<i32>,
|
||||||
|
background_tranquility: u32,
|
||||||
replication: TableShardedReplication,
|
replication: TableShardedReplication,
|
||||||
system: Arc<System>,
|
system: Arc<System>,
|
||||||
) -> Arc<Self> {
|
) -> Arc<Self> {
|
||||||
|
@ -139,6 +139,7 @@ impl BlockManager {
|
||||||
replication,
|
replication,
|
||||||
data_dir,
|
data_dir,
|
||||||
compression_level,
|
compression_level,
|
||||||
|
background_tranquility,
|
||||||
mutation_lock: Mutex::new(manager_locked),
|
mutation_lock: Mutex::new(manager_locked),
|
||||||
rc,
|
rc,
|
||||||
resync_queue,
|
resync_queue,
|
||||||
|
@ -440,7 +441,7 @@ impl BlockManager {
|
||||||
while !*must_exit.borrow() {
|
while !*must_exit.borrow() {
|
||||||
match self.resync_iter(&mut must_exit).await {
|
match self.resync_iter(&mut must_exit).await {
|
||||||
Ok(true) => {
|
Ok(true) => {
|
||||||
tranquilizer.tranquilize(BACKGROUND_TRANQUILITY).await;
|
tranquilizer.tranquilize(self.background_tranquility).await;
|
||||||
}
|
}
|
||||||
Ok(false) => {
|
Ok(false) => {
|
||||||
tranquilizer.reset();
|
tranquilizer.reset();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
|
|
||||||
use garage_util::error::*;
|
|
||||||
use garage_util::data::*;
|
use garage_util::data::*;
|
||||||
|
use garage_util::error::*;
|
||||||
use garage_util::time::*;
|
use garage_util::time::*;
|
||||||
|
|
||||||
use crate::manager::BLOCK_GC_DELAY;
|
use crate::manager::BLOCK_GC_DELAY;
|
||||||
|
@ -12,9 +12,7 @@ pub struct BlockRc {
|
||||||
|
|
||||||
impl BlockRc {
|
impl BlockRc {
|
||||||
pub(crate) fn new(rc: sled::Tree) -> Self {
|
pub(crate) fn new(rc: sled::Tree) -> Self {
|
||||||
Self {
|
Self { rc }
|
||||||
rc
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Increment the reference counter associated to a hash.
|
/// Increment the reference counter associated to a hash.
|
||||||
|
@ -34,7 +32,7 @@ impl BlockRc {
|
||||||
.rc
|
.rc
|
||||||
.update_and_fetch(&hash, |old| RcEntry::parse_opt(old).decrement().serialize())?;
|
.update_and_fetch(&hash, |old| RcEntry::parse_opt(old).decrement().serialize())?;
|
||||||
let new_rc = RcEntry::parse_opt(new_rc);
|
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
|
/// Read a block's reference count
|
||||||
|
|
|
@ -7,11 +7,11 @@ use garage_util::config::*;
|
||||||
|
|
||||||
use garage_rpc::system::System;
|
use garage_rpc::system::System;
|
||||||
|
|
||||||
|
use garage_block::manager::*;
|
||||||
use garage_table::replication::ReplicationMode;
|
use garage_table::replication::ReplicationMode;
|
||||||
use garage_table::replication::TableFullReplication;
|
use garage_table::replication::TableFullReplication;
|
||||||
use garage_table::replication::TableShardedReplication;
|
use garage_table::replication::TableShardedReplication;
|
||||||
use garage_table::*;
|
use garage_table::*;
|
||||||
use garage_block::manager::*;
|
|
||||||
|
|
||||||
use crate::block_ref_table::*;
|
use crate::block_ref_table::*;
|
||||||
use crate::bucket_alias_table::*;
|
use crate::bucket_alias_table::*;
|
||||||
|
@ -86,11 +86,14 @@ impl Garage {
|
||||||
};
|
};
|
||||||
|
|
||||||
info!("Initialize block manager...");
|
info!("Initialize block manager...");
|
||||||
let block_manager =
|
let block_manager = BlockManager::new(
|
||||||
BlockManager::new(&db,
|
&db,
|
||||||
config.data_dir.clone(),
|
config.data_dir.clone(),
|
||||||
config.compression_level,
|
config.compression_level,
|
||||||
data_rep_param, system.clone());
|
config.block_manager_background_tranquility,
|
||||||
|
data_rep_param,
|
||||||
|
system.clone(),
|
||||||
|
);
|
||||||
|
|
||||||
info!("Initialize block_ref_table...");
|
info!("Initialize block_ref_table...");
|
||||||
let block_ref_table = Table::new(
|
let block_ref_table = Table::new(
|
||||||
|
|
|
@ -23,6 +23,10 @@ pub struct Config {
|
||||||
#[serde(default = "default_block_size")]
|
#[serde(default = "default_block_size")]
|
||||||
pub block_size: usize,
|
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:
|
/// Replication mode. Supported values:
|
||||||
/// - none, 1 -> no replication
|
/// - none, 1 -> no replication
|
||||||
/// - 2 -> 2-way replication
|
/// - 2 -> 2-way replication
|
||||||
|
@ -118,6 +122,9 @@ fn default_sled_flush_every_ms() -> u64 {
|
||||||
fn default_block_size() -> usize {
|
fn default_block_size() -> usize {
|
||||||
1048576
|
1048576
|
||||||
}
|
}
|
||||||
|
fn default_block_manager_background_tranquility() -> u32 {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
|
||||||
/// Read and parse configuration
|
/// Read and parse configuration
|
||||||
pub fn read_config(config_file: PathBuf) -> Result<Config, Error> {
|
pub fn read_config(config_file: PathBuf) -> Result<Config, Error> {
|
||||||
|
|
Loading…
Reference in a new issue