Allow user to set an epoch margin for pruning
This commit is contained in:
parent
d7fc24a9d5
commit
1812301c9c
@ -201,6 +201,10 @@ impl Config {
|
|||||||
pub fn create_data_dir(&self) -> Result<PathBuf, String> {
|
pub fn create_data_dir(&self) -> Result<PathBuf, String> {
|
||||||
ensure_dir_exists(self.get_data_dir())
|
ensure_dir_exists(self.get_data_dir())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_blob_prune_margin_epochs(&self) -> Option<u64> {
|
||||||
|
self.store.blob_prune_margin_epochs
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Ensure that the directory at `path` exists, by creating it and all parents if necessary.
|
/// Ensure that the directory at `path` exists, by creating it and all parents if necessary.
|
||||||
|
@ -568,6 +568,14 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
|
|||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.default_value("1")
|
.default_value("1")
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("blob-prune-margin-epochs")
|
||||||
|
.long("blob-prune-margin-epochs")
|
||||||
|
.help("The margin for blob pruning in epochs. The oldest blobs are pruned \
|
||||||
|
up until data_availability_boundary - blob_prune_margin_epochs.")
|
||||||
|
.takes_value(true)
|
||||||
|
.default_value("0")
|
||||||
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Misc.
|
* Misc.
|
||||||
|
@ -421,6 +421,14 @@ pub fn get_config<E: EthSpec>(
|
|||||||
client_config.store.epochs_per_blob_prune = epochs_per_blob_prune;
|
client_config.store.epochs_per_blob_prune = epochs_per_blob_prune;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(blob_prune_margin_epochs) =
|
||||||
|
clap_utils::parse_optional(cli_args, "blob-prune-margin-epochs")?
|
||||||
|
{
|
||||||
|
if blob_prune_margin_epochs > 0 {
|
||||||
|
client_config.store.blob_prune_margin_epochs = Some(blob_prune_margin_epochs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Zero-ports
|
* Zero-ports
|
||||||
*
|
*
|
||||||
|
@ -9,6 +9,7 @@ pub const DEFAULT_SLOTS_PER_RESTORE_POINT: u64 = 8192;
|
|||||||
pub const DEFAULT_BLOCK_CACHE_SIZE: usize = 5;
|
pub const DEFAULT_BLOCK_CACHE_SIZE: usize = 5;
|
||||||
pub const DEFAULT_BLOB_CACHE_SIZE: usize = 5;
|
pub const DEFAULT_BLOB_CACHE_SIZE: usize = 5;
|
||||||
pub const DEFAULT_EPOCHS_PER_BLOB_PRUNE: u64 = 1;
|
pub const DEFAULT_EPOCHS_PER_BLOB_PRUNE: u64 = 1;
|
||||||
|
pub const DEFAULT_BLOB_PUNE_MARGIN_EPOCHS: Option<u64> = None;
|
||||||
|
|
||||||
/// Database configuration parameters.
|
/// Database configuration parameters.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
@ -29,8 +30,11 @@ pub struct StoreConfig {
|
|||||||
pub prune_payloads: bool,
|
pub prune_payloads: bool,
|
||||||
/// Whether to prune blobs older than the blob data availability boundary.
|
/// Whether to prune blobs older than the blob data availability boundary.
|
||||||
pub prune_blobs: bool,
|
pub prune_blobs: bool,
|
||||||
/// Frequency of blob pruning. Default: every epoch.
|
/// Frequency of blob pruning in epochs. Default: every epoch.
|
||||||
pub epochs_per_blob_prune: u64,
|
pub epochs_per_blob_prune: u64,
|
||||||
|
/// The margin for blob pruning in epochs. The oldest blobs are pruned up until
|
||||||
|
/// data_availability_boundary - blob_prune_margin_epochs. Default: 0.
|
||||||
|
pub blob_prune_margin_epochs: Option<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Variant of `StoreConfig` that gets written to disk. Contains immutable configuration params.
|
/// Variant of `StoreConfig` that gets written to disk. Contains immutable configuration params.
|
||||||
@ -57,6 +61,7 @@ impl Default for StoreConfig {
|
|||||||
prune_payloads: true,
|
prune_payloads: true,
|
||||||
prune_blobs: true,
|
prune_blobs: true,
|
||||||
epochs_per_blob_prune: DEFAULT_EPOCHS_PER_BLOB_PRUNE,
|
epochs_per_blob_prune: DEFAULT_EPOCHS_PER_BLOB_PRUNE,
|
||||||
|
blob_prune_margin_epochs: DEFAULT_BLOB_PUNE_MARGIN_EPOCHS,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1798,8 +1798,20 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
|
|||||||
|
|
||||||
let mut ops = vec![];
|
let mut ops = vec![];
|
||||||
let mut last_pruned_block_root = None;
|
let mut last_pruned_block_root = None;
|
||||||
// Prune up until the data availability boundary.
|
|
||||||
let end_slot = (data_availability_boundary - 1).end_slot(E::slots_per_epoch());
|
// At most prune up until the data availability boundary epoch, leaving at least blobs in
|
||||||
|
// the data availability boundary epoch and younger.
|
||||||
|
let end_slot = {
|
||||||
|
let earliest_prunable_epoch = data_availability_boundary - 1;
|
||||||
|
// Stop pruning before reaching the data availability boundary if a margin is
|
||||||
|
// configured.
|
||||||
|
let end_epoch = if let Some(margin) = self.get_config().blob_prune_margin_epochs {
|
||||||
|
earliest_prunable_epoch - margin
|
||||||
|
} else {
|
||||||
|
earliest_prunable_epoch
|
||||||
|
};
|
||||||
|
end_epoch.end_slot(E::slots_per_epoch())
|
||||||
|
};
|
||||||
|
|
||||||
for res in self.forwards_block_roots_iterator_until(
|
for res in self.forwards_block_roots_iterator_until(
|
||||||
oldest_blob_slot,
|
oldest_blob_slot,
|
||||||
|
@ -94,6 +94,16 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
|
|||||||
.help("Data directory for the freezer database.")
|
.help("Data directory for the freezer database.")
|
||||||
.takes_value(true),
|
.takes_value(true),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("blob-prune-margin-epochs")
|
||||||
|
.long("blob-prune-margin-epochs")
|
||||||
|
.help(
|
||||||
|
"The margin for blob pruning in epochs. The oldest blobs are pruned \
|
||||||
|
up until data_availability_boundary - blob_prune_margin_epochs.",
|
||||||
|
)
|
||||||
|
.takes_value(true)
|
||||||
|
.default_value("0"),
|
||||||
|
)
|
||||||
.subcommand(migrate_cli_app())
|
.subcommand(migrate_cli_app())
|
||||||
.subcommand(version_cli_app())
|
.subcommand(version_cli_app())
|
||||||
.subcommand(inspect_cli_app())
|
.subcommand(inspect_cli_app())
|
||||||
@ -117,6 +127,14 @@ fn parse_client_config<E: EthSpec>(
|
|||||||
client_config.store.slots_per_restore_point = sprp;
|
client_config.store.slots_per_restore_point = sprp;
|
||||||
client_config.store.slots_per_restore_point_set_explicitly = sprp_explicit;
|
client_config.store.slots_per_restore_point_set_explicitly = sprp_explicit;
|
||||||
|
|
||||||
|
if let Some(blob_prune_margin_epochs) =
|
||||||
|
clap_utils::parse_optional(cli_args, "blob-prune-margin-epochs")?
|
||||||
|
{
|
||||||
|
if blob_prune_margin_epochs > 0 {
|
||||||
|
client_config.store.blob_prune_margin_epochs = Some(blob_prune_margin_epochs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(client_config)
|
Ok(client_config)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user