Verify StoreConfig

This commit is contained in:
Emilia Hane 2023-01-24 17:58:54 +01:00
parent 00ca21e84c
commit b2abec5d35
No known key found for this signature in database
GPG Key ID: E73394F9C09206FA
2 changed files with 20 additions and 3 deletions

View File

@ -563,8 +563,8 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
Arg::with_name("epochs-per-blob-prune")
.long("epochs-per-blob-prune")
.help("The epoch interval with which to prune blobs from Lighthouse's \
database when they are older than the data data availability \
boundary relative to the current epoch.")
database when they are older than the data availability boundary \
relative to the current epoch.")
.takes_value(true)
.default_value("1")
)

View File

@ -109,6 +109,7 @@ pub enum HotColdDBError {
slots_per_historical_root: u64,
slots_per_epoch: u64,
},
ZeroEpochsPerBlobPrune,
RestorePointBlockHashError(BeaconStateError),
IterationError {
unexpected_key: BytesKey,
@ -126,7 +127,7 @@ impl<E: EthSpec> HotColdDB<E, MemoryStore<E>, MemoryStore<E>> {
spec: ChainSpec,
log: Logger,
) -> Result<HotColdDB<E, MemoryStore<E>, MemoryStore<E>>, Error> {
Self::verify_slots_per_restore_point(config.slots_per_restore_point)?;
Self::verify_config(&config)?;
let db = HotColdDB {
split: RwLock::new(Split::default()),
@ -1522,6 +1523,12 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
self.hot_db.get(state_root)
}
/// Verify that a parsed config.
fn verify_config(config: &StoreConfig) -> Result<(), HotColdDBError> {
Self::verify_slots_per_restore_point(config.slots_per_restore_point)?;
Self::verify_epochs_per_blob_prune(config.epochs_per_blob_prune)
}
/// Check that the restore point frequency is valid.
///
/// Specifically, check that it is:
@ -1552,6 +1559,16 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
}
}
// Check that epochs_per_blob_prune is at least 1 epoch to avoid attempting to prune the same
// epochs over and over again.
fn verify_epochs_per_blob_prune(epochs_per_blob_prune: u64) -> Result<(), HotColdDBError> {
if epochs_per_blob_prune > 0 {
Ok(())
} else {
Err(HotColdDBError::ZeroEpochsPerBlobPrune)
}
}
/// Run a compaction pass to free up space used by deleted states.
pub fn compact(&self) -> Result<(), Error> {
self.hot_db.compact()?;