perf: optimize SyncHeight event handling to avoid recursive calls (#19372)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
Ragnar
2025-10-31 16:44:14 +01:00
committed by GitHub
parent b05eb5f793
commit e894db8e07

View File

@@ -52,17 +52,7 @@ impl MetricsListener {
trace!(target: "sync::metrics", ?event, "Metric event received");
match event {
MetricEvent::SyncHeight { height } => {
for stage_id in StageId::ALL {
self.handle_event(MetricEvent::StageCheckpoint {
stage_id,
checkpoint: StageCheckpoint {
block_number: height,
stage_checkpoint: None,
},
max_block_number: Some(height),
elapsed: Duration::default(),
});
}
self.update_all_stages_height(height);
}
MetricEvent::StageCheckpoint { stage_id, checkpoint, max_block_number, elapsed } => {
let stage_metrics = self.sync_metrics.get_stage_metrics(stage_id);
@@ -83,6 +73,17 @@ impl MetricsListener {
}
}
}
/// Updates all stage checkpoints to the given height efficiently.
fn update_all_stages_height(&mut self, height: BlockNumber) {
for stage_id in StageId::ALL {
let stage_metrics = self.sync_metrics.get_stage_metrics(stage_id);
let height_f64 = height as f64;
stage_metrics.checkpoint.set(height_f64);
stage_metrics.entities_processed.set(height_f64);
stage_metrics.entities_total.set(height_f64);
}
}
}
impl Future for MetricsListener {