fix(engine): run pruner after saving blocks (#11927)

This commit is contained in:
joshieDo
2024-10-22 20:39:08 +09:00
committed by GitHub
parent e8205936da
commit cab76f2083

View File

@ -77,20 +77,22 @@ impl<N: ProviderNodeTypes> PersistenceService<N> {
}
PersistenceAction::SaveBlocks(blocks, sender) => {
let result = self.on_save_blocks(blocks)?;
if let Some(ref num_hash) = result {
let result_number = result.map(|r| r.number);
// we ignore the error because the caller may or may not care about the result
let _ = sender.send(result);
if let Some(block_number) = result_number {
// send new sync metrics based on saved blocks
let _ = self
.sync_metrics_tx
.send(MetricEvent::SyncHeight { height: num_hash.number });
}
// we ignore the error because the caller may or may not care about the result
let _ = sender.send(result);
}
PersistenceAction::PruneBefore(block_num, sender) => {
let res = self.prune_before(block_num)?;
.send(MetricEvent::SyncHeight { height: block_number });
// we ignore the error because the caller may or may not care about the result
let _ = sender.send(res);
if self.pruner.is_pruning_needed(block_number) {
// We log `PrunerOutput` inside the `Pruner`
let _ = self.prune_before(block_number)?;
}
}
}
PersistenceAction::SaveFinalizedBlock(finalized_block) => {
let provider = self.provider.database_provider_rw()?;
@ -175,10 +177,6 @@ pub enum PersistenceAction {
/// static files.
RemoveBlocksAbove(u64, oneshot::Sender<Option<BlockNumHash>>),
/// Prune associated block data before the given block number, according to already-configured
/// prune modes.
PruneBefore(u64, oneshot::Sender<PrunerOutput>),
/// Update the persisted finalized block on disk
SaveFinalizedBlock(u64),
@ -279,18 +277,6 @@ impl PersistenceHandle {
) -> Result<(), SendError<PersistenceAction>> {
self.send_action(PersistenceAction::RemoveBlocksAbove(block_num, tx))
}
/// Tells the persistence service to remove block data before the given hash, according to the
/// configured prune config.
///
/// The resulting [`PrunerOutput`] is returned in the receiver end of the sender argument.
pub fn prune_before(
&self,
block_num: u64,
tx: oneshot::Sender<PrunerOutput>,
) -> Result<(), SendError<PersistenceAction>> {
self.send_action(PersistenceAction::PruneBefore(block_num, tx))
}
}
#[cfg(test)]